Noções Básicas de Qualidade de Código
10 exemplos para você começar com a qualidade de código Go - 7 básicos e 3 intermediários.
Busque em todas as páginas da documentação
10 exemplos para você começar com a qualidade de código Go - 7 básicos e 3 intermediários.
mkdir quality && cd quality && go mod init example.com/quality.go install golang.org/x/tools/cmd/goimports@latest e go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest.Reescreve um arquivo para a formatação Go canônica.
gofmt -w main.gopackage main
import "fmt"
func main() {fmt.Println("hello")}Após gofmt -w, o espaçamento e a indentação correspondem ao estilo da comunidade.
gofmt é determinístico: a mesma entrada sempre produz a mesma saída.test -z "$(gofmt -l .)" para falhar em caso de desvio.Relacionado: Aplicação de gofmt & goimports - política de formatação da equipe
Formata e corrige blocos de importação em uma única etapa.
goimports -w .package main
import "fmt"
func main() {
fmt.Println(time.Now()) // importação ausente antes do goimports
}goimports adiciona importações ausentes da biblioteca padrão e remove as não utilizadas.-local example.com/quality para agrupar os caminhos do seu módulo separadamente.goimports ao salvar via gopls.Relacionado: Aplicação de gofmt & goimports - agrupamento
-local
Executa analisadores integrados em todo o módulo.
go vet ./...package main
import "fmt"
func main() {
fmt.Printf("%d", "not-a-number") // vet: incompatibilidade de formato Printf
}vet relata problemas que o compilador aceita, mas que provavelmente são bugs.vet - leia as notas de lançamento.Relacionado: go vet & Diagnósticos Comuns de Analisadores - mensagens comuns
A qualidade inclui o comportamento, não apenas verificações estáticas.
go test ./...package add
func Sum(a, b int) int { return a + b }package add_test
import "testing"
func TestSum(t *testing.T) {
if got := add.Sum(2, 3); got != 5 {
t.Fatalf("got %d", got)
}
}*_test.go no mesmo pacote (ou no pacote externo _test).go test compila testes com o detector de corrida quando você passa -race.Relacionado: Portões de Qualidade de CI: Lint, Teste, Corrida, Vulnerabilidade - pipeline completo
Verifica a formatação sem escrever arquivos (amigável ao CI).
gofmt -l ..go estão formatados.gofmt -w.git diff --exit-code após a formatação em hooks pre-commit.Relacionado: Hooks Pre-commit & Checklists de Revisão - automação local
Executa o pacote padrão de linters.
golangci-lint run ./....golangci.yml após o baseline estar verde.vet antes de perseguir pequenas questões de estilo.Relacionado: Configuração do golangci-lint - padrões de arquivo de configuração
Um comando para contribuidores.
.PHONY: check
check:
gofmt -l . | tee /tmp/gofmt.out && test ! -s /tmp/gofmt.out
go vet ./...
go test ./...make checkmake check no README e CONTRIBUTING.golangci-lint run quando a equipe estiver pronta.Relacionado: Melhores Práticas de Linting & Qualidade de Código - ritmo de adoção
Detecta corridas de dados que vet não pega.
go test -race ./...package counter
import "sync"
type Counter struct {
mu sync.Mutex
n int
}
func (c *Counter) Inc() {
c.mu.Lock()
c.n++
c.mu.Unlock()
}-race torna os testes mais lentos e requer mais memória; execute no CI, não a cada salvamento.Relacionado: Portões de Qualidade de CI: Lint, Teste, Corrida, Vulnerabilidade - quando exigir corrida
Mantém os metadados do módulo consistentes.
go mod tidy
git diff --exit-code go.mod go.sumgo.sum commitadas.govulncheck para verificação de segurança no grafo tidy.Relacionado: govulncheck para Vulnerabilidades de Dependência - verificação de CVE
Bloqueia commits que falham em verificações rápidas.
#!/usr/bin/env bash
set -euo pipefail
gofmt -l . | grep . && { echo "run gofmt -w"; exit 1; } || true
go vet ./...
go test ./...chmod +x scripts/pre-commit.sh
# Conecte com: ln -s ../../scripts/pre-commit.sh .git/hooks/pre-commitgolangci-lint para o CI se exceder ~60s localmente.--no-verify) apenas para emergências.Relacionado: Hooks Pre-commit & Checklists de Revisão - modelos de hook
Versõ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 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: 19 de jul. de 2026