Go Academy · Pelajaran

Alternatif: HashiCorp go-plugin

Plugin berbasis RPC untuk dukungan lintas platform

Pelajaran 4 dari 414 langkah

Alternatif: HashiCorp go-plugin adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.

Mengapa go-plugin?

Paket pengaya asli Go hanya tersedia di Linux/macOS, memerlukan versi dependensi yang identik, dan tidak dapat membongkar pengaya. HashiCorp go-plugin mengatasi masalah ini dengan menjalankan pengaya sebagai proses terpisah yang berkomunikasi melalui RPC (gRPC atau net/rpc).

Arsitektur

go-plugin menjalankan biner pengaya sebagai subproses. Program utama memulainya, membuat koneksi gRPC/net/rpc, lalu memanggil pengaya melalui klien yang dihasilkan. Proses pengaya dihentikan saat program utama keluar.

Mendefinisikan antarmuka

Definisikan antarmuka dalam paket bersama, lalu sediakan penghubung gRPC atau net/rpc.

// shared/interface.go
type Greeter interface {
    Greet(name string) (string, error)
}

Sisi pengaya

Pengaya mengimplementasikan antarmuka dan mendaftarkannya dengan mekanisme penyajian go-plugin:

func main() {
    plugin.Serve(&plugin.ServeConfig{
        HandshakeConfig: Handshake,
        Plugins: map[string]plugin.Plugin{
            "greeter": &GreeterPlugin{Impl: &Greeter{}},
        },
        GRPCServer: plugin.DefaultGRPCServer,
    })
}

Sisi program utama

Program utama menjalankan subproses pengaya dan memperoleh antarmuka melalui klien:

client := plugin.NewClient(&plugin.ClientConfig{
    HandshakeConfig: Handshake,
    Plugins:         PluginMap,
    Cmd:             exec.Command("./greeter-plugin"),
    AllowedProtocols: []plugin.Protocol{plugin.ProtocolGRPC},
})
rpcClient, _ := client.Client()
raw, _ := rpcClient.Dispense("greeter")
greeter := raw.(Greeter)

Konfigurasi jabat tangan

HandshakeConfig bersama (kunci+nilai cookie ajaib) mencegah biner non-pengaya dijalankan secara tidak sengaja sebagai pengaya:

var Handshake = plugin.HandshakeConfig{
    ProtocolVersion:  1,
    MagicCookieKey:   "GREETER_PLUGIN",
    MagicCookieValue: "hello",
}

Lintas platform

Karena pengaya merupakan proses terpisah yang berkomunikasi melalui TCP atau soket Unix, pengaya dapat dikompilasi untuk platform apa pun. Program utama dan pengaya tidak perlu menggunakan versi Go yang identik.

Isolasi kerusakan

Jika pengaya mengalami kerusakan, program utama menerima kesalahan pada pemanggilan RPC berikutnya. Program utama dapat memulai ulang subproses pengaya dan menyambungkannya kembali tanpa ikut mengalami kerusakan.

Performa

RPC go-plugin menambah latensi dibandingkan pemanggilan fungsi dalam proses (mikrodetik dibandingkan nanodetik). Hal ini dapat diterima untuk pemanggilan pengaya yang jarang dan berat, tetapi tidak sesuai untuk perulangan yang sering dijalankan.

Pembuatan versi

go-plugin mendukung pembuatan versi protokol — program utama dapat bernegosiasi dengan beberapa versi antarmuka pengaya secara bersamaan, sehingga pembaruan pengaya dapat dilakukan secara bertahap.

Penggunaan di dunia nyata

go-plugin mendukung penyedia Terraform, mesin rahasia Vault, dan pembangun Packer milik HashiCorp — ekosistem besar dengan pengaya yang dikembangkan komunitas.

Kapan harus memilihnya

Pilih go-plugin daripada pengaya asli ketika: dukungan lintas platform diperlukan, isolasi kerusakan penting, versi dependensi tidak dapat diselaraskan, atau pengaya ditulis oleh pihak ketiga.

Pemeriksaan Singkat

Bagaimana HashiCorp go-plugin mencapai isolasi kerusakan?

Rangkuman: HashiCorp go-plugin

Poin utama:

  • Pengaya berjalan sebagai subproses; berkomunikasi melalui gRPC atau net/rpc
  • Lintas platform, terisolasi dari kerusakan, dan toleran terhadap perbedaan versi
  • HandshakeConfig mencegah peluncuran biner secara tidak sengaja
  • Beban tambahan dari RPC; gunakan untuk pemanggilan yang berat dan jarang
Gratis untuk memulai

Belajar Go dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
51
Pelajaran
203

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Alternatif: HashiCorp go-plugin” gratis?

Ya — teks lengkap “Alternatif: HashiCorp go-plugin” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Alternatif: HashiCorp go-plugin”?

Plugin berbasis RPC untuk dukungan lintas platform Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Go Academy?

Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Alternatif: HashiCorp go-plugin” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar Paket Plugin Go
  2. Mendesain Interface Plugin
  3. Pemuatan Dinamis dan Simbol
  4. Alternatif: HashiCorp go-plugin
← Kembali ke Go Academy