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
package main
import (
"fmt"
"plugin"
)
func main() {
// buraya yaz
}Örnek çözüm
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
sym, err := p.____("Selam")
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 |