go test, list & generate
go test executa testes de pacotes, go list introspecta o que o sistema de build vê, e go generate aciona hooks de geração de código que você define ao lado dos arquivos de origem.
Busque em todas as páginas da documentação
go test executa testes de pacotes, go list introspecta o que o sistema de build vê, e go generate aciona hooks de geração de código que você define ao lado dos arquivos de origem.
Testes são de primeira classe na toolchain: nenhum runner externo é necessário para testes unitários, benchmarks, exemplos ou alvos de fuzzing.
go list expõe pacotes, dependências, tags e versões de módulos como JSON legível por máquina para scripts e CI.
go generate executa diretivas //go:generate, geralmente chamando ferramentas instaladas com go install.
Juntos, eles formam o loop diário: listar o que existe, gerar o que está desatualizado, testar o que mudou.
Cartão de receita de referência rápida - pronto para copiar e colar.
# Executa todos os testes com detector de race e cobertura
go test -race -cover ./...
# Executa um teste por nome com saída verbosa
go test -run TestParseConfig -v ./internal/config
# Lista pacotes como JSON para scripting
go list -json ./...
# Executa todos os geradores no módulo
go generate ./...Quando usar isso:
go test ./... como o portão padrão de CI antes do merge.go list -f para construir relatórios de SBOM ou de propriedade.go generate após alterar definições de protobuf, stringer ou mock.go test -bench ao otimizar caminhos críticos com números reproduzíveis.// mathutil/sum.go
package mathutil
func Sum(nums []int) int {
total := 0
for _, n := range nums {
total += n
}
return total
}// mathutil/sum_test.go
package mathutil
import "testing"
func TestSum(t *testing.T) {
got := Sum([]int{1, 2, 3})
if got != 6 {
t.Fatalf("got %d want 6", got)
}
}
func BenchmarkSum(b *testing.B) {
data := make([]int, 1000)
for i := range data {
data[i] = i
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
Sum(data)
}
}// api/doc.go
package api
//go:generate go run golang.org/x/tools/cmd/stringer@latest -type=Kind
type Kind int
const (
KindHTTP Kind = iota
KindGRPC
)go test -cover ./mathutil
go test -bench=. -benchmem ./mathutil
go list -f '{{.ImportPath}} tags={{.BuildTags}}' ./...
go generate ./apiO que isso demonstra:
t.Fatalf para falha rápida.b.ResetTimer() excluindo o trabalho de configuração.go list -f template customizado para scripts de inventário.//go:generate colocado ao lado do tipo que ele mantém.go test compila um main de teste que vincula arquivos _test.go, em seguida, executa o binário e transmite os resultados.-count=1.go list carrega pacotes sem necessariamente vincular; -json emite structs para automação.go generate escaneia linhas //go:generate e executa comandos na ordem dos arquivos; ele não rastreia a obsolescência por si só.go test em Resumo| Flag | Propósito |
|---|---|
-run regexp | Filtra testes, benchmarks, fuzz por nome |
-race | Habilita o detector de race |
-cover | Imprime a porcentagem de cobertura |
-coverprofile=file | Escreve o perfil de cobertura para go tool cover |
-bench regexp | Executa benchmarks que correspondem ao padrão |
-benchmem | Relata alocações em benchmarks |
-timeout d | Interrompe testes após a duração (padrão 10m) |
-count n | Executa cada teste n vezes; 1 desabilita o cache de passagens |
-shuffle on | Embaralha a ordem dos testes para expor acoplamentos |
go list| Campo do template | Significado |
|---|---|
.ImportPath | Caminho de importação canônico |
.Dir | Diretório no disco |
.GoFiles | Arquivos .go de produção selecionados por tags |
.TestGoFiles | Arquivos _test.go no pacote |
.Deps | Caminhos de importação transitivos |
.Module | Metadados do módulo quando em modo de módulo |
go generate//go:generate (sem espaço antes de go).git diff na CI.go run tool@version em vez de binários locais não documentados para reprodutibilidade.go test sem ./... executa tudo - . nu é apenas o pacote atual. Correção: go test ./... da raiz do módulo.go test -count=1 durante a depuração; corrija a causa raiz antes de mesclar.-benchmem - regressões de alocação permanecem invisíveis. Correção: adicione -benchmem e compare com benchstat.go generate na CI sem verificar diffs - o drift mescla silenciosamente. Correção: execute generate em um job que falha com git diff não vazio.package foo_test não pode acessar símbolos não exportados. Correção: teste a API exportada ou use o pacote de teste interno package foo.list manualmente - fácil de perder novas linhas incorporadas. Correção: use jq na saída de go list -json em scripts.| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
gotestsum | XML JUnit e logs de CI mais bonitos | go test -v padrão é suficiente localmente |
make generate | A equipe quer uma entrada para muitos geradores | go generate ./... já cobre o módulo |
buf generate / protoc direto | Pipelines Protobuf com seus próprios plugins | Hooks simples stringer/mockgen em arquivos Go |
golangci-lint run | Lint além do compilador e vet | Você só precisa do runner de teste da stdlib |
func TestXxx(t *testing.T) afirma a correção.
func BenchmarkXxx(b *testing.B) mede o desempenho e executa b.N iterações.
func FuzzXxx(f *testing.F) semeia entradas e as muta para encontrar crashes.
Execute com go test -fuzz=FuzzName (Go 1.18+).
Sim.
func ExampleXxx() em arquivos _test.go são compilados e opcionalmente verificados para stdout com comentários // Output:.
Tags de build filtram fontes.
Arquivos com //go:build ignore nunca aparecem em .GoFiles.
Não.
Você o invoca explicitamente ou a partir de hooks de CI/Makefile.
Marque testes longos com if testing.Short() { t.Skip() } e execute a CI com -short.
Resultados de testes passados armazenados sob GOCACHE.
Alterar fontes ou flags invalida entradas; falhas não são cacheadas.
Sim, mas testes de package main geralmente vivem em main_test.go ao lado de main.go.
Considere extrair a lógica para pacotes importáveis para facilitar os testes.
go list -m all da raiz do módulo.
No modo workspace, execute a partir da raiz do workspace para incluir todos os módulos em go.work.
Sim.
Use go run pkg@version em diretivas para que colegas e a CI resolvam a mesma ferramenta.
go test e go listlist difere por tagsVersões da Stack: Esta página foi escrita para Go 1.26.x (padrão Green Tea GC, modernizadores go fix - verifique o patch na build), chi (última - verifique na build), gin (última - verifique na build), echo (última - verifique na build), google.golang.org/grpc (última - verifique na build), sigs.k8s.io/controller-runtime (última - verifique na build), kubebuilder (última - verifique na build), tinygo (última - verifique os alvos de placa na build), wazero (última - verifique na build) e golangci-lint (última - verifique o conjunto de linters na build).
Revisado por Chris St. John·Última atualização: 18 de jul. de 2026