Distribuindo ferramentas de CLI
Compilação cruzada, goreleaser e taps do homebrew
Distribuindo ferramentas de CLI é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 4 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.
go install para distribuição local
go install github.com/user/tool@latest compila e instala o binário em $GOPATH/bin. Os usuários precisam ter o Go instalado.
Compilação cruzada
O Go faz compilação cruzada nativamente. Defina GOOS e GOARCH para direcionar a compilação a sistemas operacionais diferentes:
GOOS=linux GOARCH=amd64 go build -o myapp-linux-amd64
GOOS=darwin GOARCH=arm64 go build -o myapp-darwin-arm64
GOOS=windows GOARCH=amd64 go build -o myapp-windows-amd64.exeSinalizadores de compilação para lançamento
Remova as informações de depuração e desative o CGO para obter binários menores e estáticos:
CGO_ENABLED=0 go build -ldflags="-s -w" -o myappIncorporando informações de versão
Insira informações do momento da compilação com ldflags:
var version = "dev"
var commit = "none"
// Build: go build -ldflags="-X main.version=1.2.3 -X main.commit=abc1234"GoReleaser
O GoReleaser automatiza a compilação cruzada, o empacotamento (tar.gz, .zip), a geração de somas de verificação e o envio de lançamentos ao GitHub. Configure-o em .goreleaser.yaml.
# .goreleaser.yaml
builds:
- env: [CGO_ENABLED=0]
goos: [linux, darwin, windows]
goarch: [amd64, arm64]Tap do Homebrew
Publique uma fórmula do Homebrew para que usuários de macOS/Linux possam instalar com brew install. O GoReleaser pode gerar a fórmula automaticamente.
CI/CD com GitHub Actions
Use uma ação do GitHub para compilar e publicar a cada envio de tag. O GoReleaser tem uma ação oficial do GitHub.
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v5
with: { version: latest, args: release --clean }
env: { GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" }Distribuição com Docker
Empacote a CLI como uma imagem Docker para usuários que preferem contêineres. Use uma compilação em vários estágios para manter a imagem final mínima.
FROM golang:1.22 AS build
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o myapp
FROM scratch
COPY --from=build /app/myapp /myapp
ENTRYPOINT ["/myapp"]go:embed para recursos
Incorpore arquivos estáticos (templates, esquemas de configuração) ao binário com //go:embed para que ele seja totalmente independente.
//go:embed templates/*
var templates embed.FSMódulos versionados
Publique seu módulo CLI seguindo o versionamento de módulos do Go. A partir da v2, o caminho de importação deve incluir /v2, e o caminho do módulo em go.mod deve corresponder a ele.
Compatibilidade com versões anteriores
Siga o versionamento semântico. Os lançamentos menores podem adicionar sinalizadores, mas não devem remover nem renomear os existentes. Mudanças incompatíveis exigem o aumento da versão principal.
Verificação rápida
Como compilar um binário Go estático para Linux em uma máquina macOS?
Recapitulação: distribuição de ferramentas CLI
Pontos principais:
- Faça compilação cruzada com GOOS/GOARCH; CGO_ENABLED=0 para binários estáticos
- GoReleaser para automatizar o fluxo de lançamento
- Injete a versão com -ldflags "-X main.version=..."
- go:embed para binários independentes com recursos incorporados
Perguntas Frequentes
A aula “Distribuindo ferramentas de CLI” é grátis?
Sim — o texto completo de “Distribuindo ferramentas de CLI” é 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 “Distribuindo ferramentas de CLI”?
Compilação cruzada, goreleaser e taps do homebrew 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 4 de 4.
Quanto tempo leva a aula “Distribuindo ferramentas de CLI”?
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 Cobra
- Flags e flags persistentes
- Subcomandos e grupos de comandos
- Distribuindo ferramentas de CLI