CodeBlanks Logo Icon CodeBlanks

Plugin yükleme

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

plugin.Open ile plugin yüklemeyi öğrenirsin.

Plugin yükleme

plugin.Open dosyayı yükler; aynı dosya ikinci kez açılırsa aynı *plugin.Plugin döner. Ardından Lookup ile sembolü adıyla istersin:

p, err := plugin.Open("selam.so")
if err != nil { log.Fatal(err) }
sym, err := p.Lookup("Selam")
if err != nil { log.Fatal(err) }

Her iki adımda da hata kontrolü şarttır.

Aynı plugin'i tekrar açmak

Bir plugin süreç başına yalnızca bir kez yüklenir; init fonksiyonları da bir kez çalışır. Dosyayı değiştirip yeniden açmak yeni kodu getirmez. Sıcak yeniden yükleme gerekiyorsa farklı dosya adıyla derlemek ya da ayrı süreç kullanmak gerekir.

Uygulama Aç ve ara

loadSymbol(path, name string) error fonksiyonu yaz: plugin.Open(path) hatasını döndürsün, sonra p.Lookup(name) hatasını döndürsün. main içinde loadSymbol("x.so", "Selam") != nil sonucunu yazdır.

Başlangıç kodu

main.go
package main

import (
    "fmt"
    "plugin"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "fmt"
    "plugin"
)

func loadSymbol(path, name string) error {
    p, err := plugin.Open(path)
    if err != nil {
        return err
    }
    _, err = p.Lookup(name)
    return err
}

func main() {
    fmt.Println(loadSymbol("x.so", "Selam") != nil)
}

Beklenen çıktı

true

Soru ve cevaplar

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

1 <code>Lookup</code> neyi döndürür?

  • plugin.Symbol ve error Doğru cevap
  • Yalnızca fonksiyon
  • Dosya yolu
  • Bir goroutine

Açıklama: Lookup bir plugin.Symbol (aslında any) ve error döndürür; kullanmadan önce gerçek türe tür iddiası yapılır.

2 Sembolü iste

Soru
sym, err := p.____("Selam")
Cevap
sym, err := p.Lookup("Selam")

Açıklama: Lookup dışa aktarılmış sembolü adıyla bulur.

3 Yükleme adımları

Kavram Anlamı
1. plugin.Open Dosyayı yükle
2. Lookup Sembolü bul
3. Tür iddiası Gerçek türe çevir
4. Çağrı Fonksiyonu kullan

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