/pt-br/pub/go-plugins.md


Golang plugins

· updated 2026-08-28 · #golang #desenvolvimento #grupo-estudos-golang

Plugins são um dos poucos recursos quase esquecidos do Go e, francamente, eu desaconselho seu uso. Ao contrário de outros recursos da linguagem, plugins funcionam apenas no Linux, BSD e macOS. Como são baseados no dlopen, você não pode descarregar nem substituir um plugin depois de carregá-lo. Além disso, é necessário usar CGO, o que pode trazer mais complicações.

Apesar dos problemas, plugins são recursos interessantes e podem ser úteis em alguns casos, como carregar um módulo de forma dinâmica.

Antes de compilar o plugin, é necessário habilitar o CGO.

export CGO_ENABLED=1

Um plugin é escrito da mesma forma que estamos acostumados. Veja o exemplo abaixo.

package main

import "fmt"

func Hello() error {
    fmt.Println("hello, plugins!")
    return nil
}

código fonte

Crie um projeto normalmente, mas não o nomeie como plugin, pois isso causa um erro de compilação.

Para compilar um plugin, use o parâmetro -buildmode=plugin.

go build -buildmode=plugin

Isso cria um arquivo hello.so que contém as funções que podem ser carregadas por um programa principal.

Caso queira que um plugin tenha um nome diferente de hello.so, use o parâmetro -o como no exemplo:

go build -buildmode=plugin -o novonome.so

Para usar um plugin, primeiro carregue o arquivo.

var p *plugin.Plugin
var err error

p, err = plugin.Open("./hello/hello.so")
if err != nil {
    fmt.Println(err)
    return
}

Em seguida, procure pela função dentro do arquivo do plugin.

var s plugin.Symbol

s, err = p.Lookup("Hello")
if err != nil {
    fmt.Println(err)
    return
}

A variável s é uma interface. Converta-a para a mesma assinatura da função Hello que veio do plugin. Crie uma variável com o mesmo nome da função para chamá-la diretamente.

Hello := s.(func() error)

Agora, você pode chamar a função Hello normalmente, como qualquer outra função do seu código.

err = Hello()
if err != nil {
    fmt.Println(err)
    return
}

código fonte

O recurso de plugins pode ser útil para criar sistemas menos monolíticos. No entanto, isso não parece tão relevante hoje como era no passado. A falta de suporte para outras plataformas, a necessidade do CGO e a impossibilidade de descarregar plugins tornam o recurso menos interessante.

Vídeo com a explicação do código:

Cesar Gimenes


crg.eti.br · © 2026 Cesar Gimenes · CC BY 4.0 · github