CodeBlanks Logo Icon CodeBlanks

Özet - plugin

  • Go kursu
  • İleri seviye
  • Ders 24/68
  • 4 dk

Plugin yapısını birleştirerek bir eklenti sistemi yazarsın.

plugin özeti

Akış: plugin'i -buildmode=plugin ile derle → plugin.Open ile yükle → Lookup ile sembolü al → fonksiyona ya da işaretçiye güvenli tür iddiası yap → kullan. Her adımda hata kontrol edilir.

Sınırlar: Windows yok, aynı Go ve bağımlılık sürümü şart, kaldırma yok. Bu sınırlar yüzünden ayrı süreç tabanlı eklenti sistemleri sık tercih edilir.

Komut kaydı örneği

Bir CLI aracı, plugins/ klasöründeki her .so dosyasını açıp Komut sembolünü arayabilir ve bulduklarını bir map'e kaydedebilir:

komutlar := map[string]Komut{}
for _, yol := range dosyalar {
    p, err := plugin.Open(yol)
    if err != nil { continue }
    if s, err := p.Lookup("Komut"); err == nil {
        if k, ok := s.(Komut); ok { komutlar[k.Ad()] = k }
    }
}

Uygulama Komut kaydı

type Komut interface { Ad() string } ve type selam struct{} tanımla; selam için Ad() "selam" döndürsün. Plugin sembolünü taklit eden var sym any = selam{} değerini , ok iddiasıyla Komut'a çevir, bir map[string]Komut'a ekle ve map'in uzunluğunu yazdır.

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

type Komut interface{ Ad() string }

type selam struct{}

func (selam) Ad() string { return "selam" }

func main() {
    komutlar := map[string]Komut{}
    var sym any = selam{}
    if k, ok := sym.(Komut); ok {
        komutlar[k.Ad()] = k
    }
    fmt.Println(len(komutlar))
}

Beklenen çıktı

1

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Hangisi plugin yerine sık kullanılan bir alternatiftir?

  • sync.Pool
  • Ayrı süreçle gRPC/RPC üzerinden konuşmak Doğru cevap
  • unsafe.Pointer
  • go:embed

Açıklama: HashiCorp go-plugin gibi sistemler eklentiyi ayrı süreçte çalıştırır; sürüm bağımlılığı ve platform sınırı kalkar.

2 Derleme modu

Soru
go build -buildmode=____ -o ek.so ./ek
Cevap
go build -buildmode=plugin -o ek.so ./ek

Açıklama: plugin derleme modu Go'dan yüklenebilir .so üretir.

3 Akış

Kavram Anlamı
-buildmode=plugin Derleme
plugin.Open Yükleme
Lookup Sembol
s.(Komut) Tür iddiası

İleri seviye bölümündeki tüm dersler