Dinamik Yükleme ve Simgeler
Plugin'leri çalışma zamanında yükleme ve dışa aktarılan simgeleri çağırma
Dinamik Yükleme ve Simgeler, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.
plugin.Open
plugin.Open(path) derlenmiş .so dosyasını yükler. Eklentinin init() işlevlerini ve paket düzeyindeki değişkenlerini başlatır, ardından sembolleri kullanılabilir hâle getirir.
p, err := plugin.Open("./plugins/mymodule.so")
if err != nil { log.Fatalf("load: %v", err) }p.Lookup
p.Lookup(name) ada göre dışa aktarılmış bir sembol bulur. Bir any döndürür; türünü beklenen türle doğrulayın.
sym, err := p.Lookup("NewProcessor")
if err != nil { log.Fatalf("lookup: %v", err) }
fn, ok := sym.(func() Processor)
if !ok { log.Fatal("wrong type") }Birden çok eklenti yükleme
Bir dizindeki her .so dosyasını yükleyin ve bir döngüde kayıt defterine ekleyin:
entries, _ := os.ReadDir("./plugins")
for _, e := range entries {
if !strings.HasSuffix(e.Name(), ".so") { continue }
p, err := plugin.Open("./plugins/" + e.Name())
if err != nil { log.Printf("skip %s: %v", e.Name(), err); continue }
loadPlugin(p)
}Üretici işlevi deseni
Eklentiler bir değer yerine bir üretici işlevi (NewXxx() Processor) dışa aktarır; böylece ana uygulama her çağrıda yeni bir örnek alır:
sym, _ := p.Lookup("NewProcessor")
factory := sym.(func() Processor)
proc := factory() // new instanceArama sırasında hata işleme
Arama hataları, sembolün dışa aktarılmadığı veya adın yanlış olduğu anlamına gelir. Sorunu kontrollü biçimde ele alın; eklentiyi atlayın ya da günlüğe kaydedip diğerlerini yüklemeye devam edin.
plugin.Open yinelemelidir
Aynı yol üzerinde plugin.Open işlevinin iki kez çağrılması aynı eklentiyi döndürür. Eklenti yalnızca bir kez başlatılır.
Tembel yükleme
Başlangıç süresini azaltmak için eklentileri başlangıçta değil, isteğe bağlı olarak (ilk kullanımda) yükleyin. Her eklentinin tam olarak bir kez yüklenmesini sağlamak için eklenti başına bir sync.Once kullanın.
var mu sync.Mutex
var loaded = map[string]*plugin.Plugin{}
func getPlugin(path string) (*plugin.Plugin, error) {
mu.Lock(); defer mu.Unlock()
if p, ok := loaded[path]; ok { return p, nil }
p, err := plugin.Open(path)
if err != nil { return nil, err }
loaded[path] = p
return p, nil
}Sembol adlandırma kuralları
Dışa aktarılan semboller için büyük harfle başlayan CamelCase adlarını kullanın (Go'nun görünürlük kuralı geçerlidir). Yaygın kural: ana değer için Plugin, üretici için New.
Eklenti paniklerini ele alma
Bir eklenti panik oluşturursa ana uygulamadaki recover ara katmanı bunu yakalayabilir; ancak eklentinin Go rutinleri tanımsız bir durumda kalabilir. Eklentiyi günlüğe kaydedip atlayın; yeniden denemeyin.
Eklenti üst verilerini doğrulama
Yüklemeden sonra kaydetmeden önce uyumluluğu doğrulamak için bir üst veri sembolünü (örneğin PluginVersion string) kontrol edin:
ver, _ := p.Lookup("PluginVersion")
if *ver.(*string) != expectedVersion { log.Fatal("incompatible") }Hızlı Kontrol
Aynı yol ile plugin.Open işlevini iki kez çağırırsanız ne olur?
Özet: Dinamik Yükleme ve Semboller
Temel noktalar:
- plugin.Open .so dosyasını yükler; p.Lookup bir any döndürür → tür doğrulaması yapın
- Bir eklenti sistemi için eklentileri bir döngüde dizinden yükleyin
- plugin.Open yinelemelidir; init() her yol için bir kez çalışır
- Yeni örnekler için değer sembolleri yerine üretici işlevlerini tercih edin
Sıkça Sorulan Sorular
“Dinamik Yükleme ve Simgeler” dersi ücretsiz mi?
Evet — “Dinamik Yükleme ve Simgeler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.
“Dinamik Yükleme ve Simgeler” dersinde ne öğreneceğim?
Plugin'leri çalışma zamanında yükleme ve dışa aktarılan simgeleri çağırma Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Go Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Dinamik Yükleme ve Simgeler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Go plugin Paketinin Temelleri
- Bir Plugin Arayüzü Tasarlama
- Dinamik Yükleme ve Simgeler
- Alternatifler: HashiCorp go-plugin