go build, run, install & clean
Estes quatro comandos cobrem como o Go transforma código-fonte em binários, os executa localmente, instala ferramentas globalmente e redefine caches ao depurar compilações desatualizadas.
Busque em todas as páginas da documentação
Estes quatro comandos cobrem como o Go transforma código-fonte em binários, os executa localmente, instala ferramentas globalmente e redefine caches ao depurar compilações desatualizadas.
go build compila pacotes em artefatos que você envia.
go run é um atalho de desenvolvimento que compila para um arquivo temporário e o executa imediatamente.
go install coloca binários de comando no seu PATH via GOBIN ou GOPATH/bin.
go clean remove saídas de compilação e entradas de cache quando você precisa de uma reconstrução a frio.
Todos os quatro compartilham o mesmo carregador de pacotes e honram tags de compilação, GOOS, GOARCH e configurações de módulos.
Cartão de receita de referência rápida - pronto para copiar e colar.
# Compila um binário de serviço com flags focadas em tamanho
go build -trimpath -ldflags="-s -w" -o bin/api ./cmd/api
# Executa localmente com argumentos
go run ./cmd/api --addr :8080
# Instala uma ferramenta CLI na versão do módulo em go.mod
go install golang.org/x/tools/cmd/goimports@latest
# Limpa o cache de resultados de teste após corrigir um teste instável
go clean -testcacheQuando usar isso:
go build para artefatos de release, imagens Docker e binários de CI.go run para iteração rápida em pacotes main.go install para ferramentas de desenvolvedor (goimports, staticcheck, CLIs de geração de código).go clean -cache apenas ao diagnosticar acertos de cache corrompidos ou impossíveis.# Layout do módulo:
# .
# ├── go.mod
# ├── cmd/seed/main.go
# └── internal/seed/seed.go
go build -o bin/seed ./cmd/seed
./bin/seed --count 5
go run ./cmd/seed --count 3
go install ./cmd/seed # instala em $(go env GOPATH)/bin ou GOBIN
go clean -i ./cmd/seed # remove o binário instalado para este caminho de importação// cmd/seed/main.go
package main
import (
"flag"
"fmt"
"example.com/tooldemo/internal/seed"
)
func main() {
n := flag.Int("count", 1, "registros a serem criados")
flag.Parse()
fmt.Println(seed.Generate(*n))
}// internal/seed/seed.go
package seed
import "fmt"
func Generate(n int) string {
return fmt.Sprintf("gerados %d registros", n)
}O que isso demonstra:
go build -o nomeia a saída explicitamente para scripts de implantação.go run aceita o mesmo caminho de pacote e encaminha flags após -- quando necessário.go install com um ./cmd/seed relativo instala a partir do módulo atual sem um go get separado.go clean -i remove o binário instalado correspondente ao caminho de importação desse pacote.go run vincula a um executável temporário no diretório temporário do sistema operacional e o exclui após a saída (a menos que -work deixe intermediários para inspeção).go install pula a cópia para o diretório atual; ele apenas atualiza o destino da instalação.| Flag | Efeito |
|---|---|
-o path | Nome do arquivo de saída (build) |
-trimpath | Remove caminhos do sistema de arquivos das posições registradas |
-ldflags "..." | Passa flags para o linker (-s -w remove informações de depuração) |
-tags list | Habilita tags de compilação separadas por vírgula |
-race | Habilita o detector de corrida (build/test) |
-mod vendor | Lê dependências de vendor/ |
-a | Força a reconstrução de todos os pacotes (ignora cache) |
| Invocação | Remove |
|---|---|
go clean | Artefatos de compilação no diretório do pacote atual |
go clean -cache | Cache de compilação inteiro (GOCACHE) |
go clean -testcache | Resultados de aprovação/falha em cache de go test |
go clean -modcache | Módulos baixados (GOMODCACHE) |
go clean -i pkg... | Binários/arquivos de compilação instalados para pacotes |
# Inspeciona onde os artefatos vão
go env GOCACHE GOMODCACHE GOPATH GOBIN
# Imprime o ID de compilação invocado pelo linker embutido em binários
go tool buildid bin/seedgo run em scripts de produção - compila a cada invocação e oculta o caminho do artefato. Correção: go build uma vez, execute o binário.-o em CI - nomes de saída padrão colidem ao compilar vários comandos em um único diretório. Correção: sempre defina -o bin/<nome>.go install sem uma versão fora de um módulo - @latest pode ultrapassar os pins de CI. Correção: execute a partir de um módulo com um require registrado ou fixe @v1.2.3.go clean -modcache em CI compartilhado - força o re-download completo e retarda todos os trabalhos. Correção: cacheie GOMODCACHE entre as execuções; limpe apenas em erros de corrupção.GOOS/GOARCH. Correção: desabilite cgo (CGO_ENABLED=0) ou instale o compilador cruzado correspondente.-trimpath - panics ainda incluem nomes de funções; apenas caminhos de arquivo são cortados. Correção: envie símbolos separadamente se precisar de depuração em nível de caminho.| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
Wrappers make / just | Equipes querem alvos nomeados (make test) | O wrapper oculta flags go que você precisa aprender |
goreleaser | Releases multiplataforma com arquivos e checksums | Um único go build para um deploy Linux é suficiente |
| Bazel / Buck | Builds herméticos em escala massiva | Módulos pequenos onde go build já é rápido |
go run | Iteração local em main | Contêineres de produção ou unidades systemd |
Informações de depuração e tabelas de símbolos adicionam tamanho.
Use -ldflags="-s -w" e -trimpath para builds de release.
A compressão UPX raramente vale os falsos positivos do antivírus.
GOBIN se definido, caso contrário GOPATH/bin.
Certifique-se de que esse diretório esteja no seu PATH.
Força a reconstrução de todos os pacotes, mesmo quando existem acertos de cache.
Use com moderação; isso derrota a compilação incremental.
Passe múltiplos caminhos de pacote: go build -o bin/a ./cmd/a -o bin/b ./cmd/b não funciona como uma única invocação.
Compile cada main separadamente ou use um pequeno loop shell.
Não.
Ele remove arquivos objeto, arquivos de compilação em cache, binários instalados e diretórios de cache - nunca fontes .go.
-trimpath remove caminhos de tempo de compilação.
Combine com hospedagem de módulos privados e GOPRIVATE para privacidade no momento da busca.
Ele compila e vincula a cada invocação.
Continue usando-o para desenvolvimento; mude para go build para execuções repetidas do mesmo código.
O diretório que armazena as saídas das ações de compilação, indexadas por entradas.
Ele torna as compilações incrementais rápidas e pode ser excluído com segurança ao solucionar problemas.
Sim.
GOOS=linux GOARCH=arm64 go build compila cruzado; as mesmas variáveis de ambiente se aplicam a go install.
Habilite-o para binários de teste (go test -race) com mais frequência do que para binários de produção.
Binários com detecção de corrida são mais lentos e precisam de mais memória.
Versões de Stack: Esta página foi escrita para Go 1.26.x (padrão Green Tea GC, go fix modernizadores - verifique o patch na compilação), chi (última versão - verifique na compilação), gin (última versão - verifique na compilação), echo (última versão - verifique na compilação), google.golang.org/grpc (última versão - verifique na compilação), sigs.k8s.io/controller-runtime (última versão - verifique na compilação), kubebuilder (última versão - verifique na compilação), tinygo (última versão - verifique os alvos de placa na compilação), wazero (última versão - verifique na compilação) e golangci-lint (última versão - verifique o conjunto de linters na compilação).
Revisado por Chris St. John·Última atualização: 18 de jul. de 2026