Fundamentos do pacote plugin do Go
Crie arquivos .so e use plugin.Open / Lookup
Fundamentos do pacote plugin do Go é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.
O que é o pacote de plug-ins do Go?
O pacote plugin (Go 1.8+) permite carregar bibliotecas compartilhadas .so compiladas durante a execução e chamar as funções e variáveis exportadas por elas.
Criando um plug-in
Compile um arquivo Go como plug-in com -buildmode=plugin:
// greeter/greeter.go
package main
func Greet(name string) string { return "Hello, " + name }Carregando um plug-in
Carregue o arquivo .so e procure os símbolos exportados:
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"))Restrições dos plug-ins
Todos os pacotes importados pelo plug-in e pelo programa hospedeiro devem ter versões idênticas. O plug-in deve usar package main. Não é possível descarregar plug-ins depois que eles são carregados.
Tipos de símbolos
plugin.Lookup retorna um any. Faça uma asserção de tipo para a assinatura de função ou o tipo de variável esperado. Incompatibilidades causam pânicos durante a execução.
Limitações de plataforma
O pacote de plug-ins funciona no Linux e no macOS, mas não no Windows nem com CGO_ENABLED=0. Ele também não oferece suporte à compilação cruzada para destinos de plug-ins.
Compatibilidade de versões
O plug-in e o programa hospedeiro devem ser compilados com a mesma versão do Go e as mesmas versões de todos os pacotes compartilhados. Uma incompatibilidade de versões faz o plug-in falhar ao carregar.
Casos de uso
Os plug-ins são adequados para: sistemas de gerenciamento de conteúdo com manipuladores fornecidos pelos usuários, bancos de dados com back-ends de armazenamento substituíveis e aplicações que precisam de extensões carregáveis durante a execução sem recompilar o programa hospedeiro.
Alternativas
Para obter mais flexibilidade, use plug-ins baseados em RPC (go-plugin da HashiCorp), módulos WebAssembly ou uma linguagem de script (Lua, Starlark) incorporada ao programa hospedeiro em vez de plug-ins nativos.
Depurando plug-ins
Os símbolos do plug-in não foram encontrados? Verifique: o package main correto, um símbolo exportado (com inicial maiúscula), tags de compilação e versões de módulos correspondentes e a plataforma correta.
O carregamento de plug-ins é unidirecional
Depois que um plug-in é carregado, não é possível descarregá-lo. Projete os sistemas para tolerar todos os plug-ins carregados ativos durante toda a vida útil do processo.
Verificação rápida
Qual é uma limitação importante do pacote de plug-ins do Go em comparação com o go-plugin da HashiCorp?
Recapitulação: pacote de plug-ins do Go
Pontos principais:
- Compile com -buildmode=plugin; carregue com plugin.Open
- plugin.Lookup retorna any; faça uma asserção de tipo para o tipo esperado
- Apenas Linux/macOS; são necessárias versões idênticas; não há descarregamento
- Prefira go-plugin (baseado em RPC) para obter flexibilidade entre plataformas
Perguntas Frequentes
A aula “Fundamentos do pacote plugin do Go” é grátis?
Sim — o texto completo de “Fundamentos do pacote plugin do Go” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.
O que vou aprender em “Fundamentos do pacote plugin do Go”?
Crie arquivos .so e use plugin.Open / Lookup Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Go Academy?
Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Fundamentos do pacote plugin do Go”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Go Academy?
Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Fundamentos do pacote plugin do Go
- Projetando uma interface de plugin
- Carregamento dinâmico e símbolos
- Alternativas: HashiCorp go-plugin