0Pricing
Go Academy · Lezione

Fondamenti del package plugin di Go

Creare file .so e utilizzare plugin.Open / Lookup

Fondamenti del package plugin di Go è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.

Che cos'è il pacchetto plugin di Go?

Il pacchetto plugin (Go 1.8+) consente di caricare a runtime librerie condivise .so compilate e di chiamarne le funzioni e variabili esportate.

Creazione di un plugin

Compili un file Go come plugin con -buildmode=plugin:

// greeter/greeter.go
package main
func Greet(name string) string { return "Hello, " + name }

Caricamento di un plugin

Carichi il file .so e cerchi i simboli esportati:

p, err := plugin.Open("./greeter.so")
if err != nil { log.Fatal(err) }

sym, err := p.Lookup("Greet")
if err != nil { log.Fatal(err) }

greet, ok := sym.(func(string) string)
if !ok { log.Fatal("wrong type") }
fmt.Println(greet("World"))

Vincoli dei plugin

Tutti i pacchetti importati dal plugin e dall'host devono essere esattamente delle stesse versioni. Il plugin deve avere package main. I plugin non possono essere scaricati dopo il caricamento.

Tipi dei simboli

plugin.Lookup restituisce un any. Esegua un'asserzione di tipo sulla firma della funzione o sul tipo di variabile previsto. Le incompatibilità causano panic a runtime.

Limitazioni delle piattaforme

Il pacchetto plugin funziona su Linux e macOS, ma non su Windows né con CGO_ENABLED=0. Inoltre, non supporta la cross-compilation verso target plugin.

Compatibilità delle versioni

Il plugin e l'host devono essere compilati con la stessa versione di Go e con le stesse versioni di tutti i pacchetti condivisi. Una mancata corrispondenza delle versioni impedisce il caricamento del plugin.

Casi d'uso

I plugin sono adatti a sistemi di gestione dei contenuti con handler forniti dagli utenti, database con backend di archiviazione sostituibili e applicazioni che richiedono estensioni caricabili a runtime senza ricompilare l'host.

Alternative

Per una maggiore flessibilità, utilizzi plugin basati su RPC (HashiCorp go-plugin), moduli WebAssembly o un linguaggio di scripting (Lua, Starlark) incorporato nell'host invece dei plugin nativi.

Debug dei plugin

Non trova i simboli del plugin? Verifichi: il package main corretto, il simbolo esportato (con iniziale maiuscola), la corrispondenza dei build tag e delle versioni dei moduli e la piattaforma corretta.

Il caricamento dei plugin è a senso unico

Una volta caricato, un plugin non può essere scaricato. Progetti i sistemi in modo che possano tollerare tutti i plugin caricati attivi per l'intera durata del processo.

Verifica rapida

Qual è una limitazione importante del pacchetto plugin di Go rispetto a HashiCorp go-plugin?

Riepilogo: pacchetto plugin di Go

Punti chiave:

  • Compilare con -buildmode=plugin; caricare con plugin.Open
  • plugin.Lookup restituisce any; eseguire un'asserzione di tipo sul tipo previsto
  • Solo Linux/macOS; sono richieste versioni identiche; non è possibile scaricare i plugin
  • Preferire go-plugin (basato su RPC) per una maggiore flessibilità multipiattaforma

Domande Frequenti

La lezione «Fondamenti del package plugin di Go» è gratuita?

Sì — il testo completo di «Fondamenti del package plugin di Go» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.

Cosa imparerò in «Fondamenti del package plugin di Go»?

Creare file .so e utilizzare plugin.Open / Lookup Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Go Academy?

Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Fondamenti del package plugin di Go»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Go Academy?

Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Fondamenti del package plugin di Go
  2. Progettare un'interfaccia per plugin
  3. Caricamento dinamico e simboli
  4. Alternative: HashiCorp go-plugin
← Torna a Go Academy