0Pricing
Go Academy · Ders

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 instance

Arama 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

  1. Go plugin Paketinin Temelleri
  2. Bir Plugin Arayüzü Tasarlama
  3. Dinamik Yükleme ve Simgeler
  4. Alternatifler: HashiCorp go-plugin
← Go Academy Sayfasına Dön