Conceptos básicos de calidad de código
10 ejemplos para empezar con la calidad de código en Go: 7 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
10 ejemplos para empezar con la calidad de código en Go: 7 básicos y 3 intermedios.
mkdir quality && cd quality && go mod init example.com/quality.go install golang.org/x/tools/cmd/goimports@latest y go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest.Reescribe un archivo al formato canónico de Go.
gofmt -w main.gopackage main
import "fmt"
func main() {fmt.Println("hello")}Después de gofmt -w, el espaciado y la indentación coinciden con el estilo de la comunidad.
gofmt es determinista: la misma entrada siempre produce la misma salida.test -z "$(gofmt -l .)" para fallar ante desviaciones.Relacionado: Aplicación de gofmt y goimports - política de formato del equipo
Formatea y corrige bloques de importación en un solo paso.
goimports -w .package main
import "fmt"
func main() {
fmt.Println(time.Now()) // falta importación antes de goimports
}-local example.com/quality para agrupar las rutas de tu módulo por separado.Relacionado: Aplicación de gofmt y goimports - agrupación
-local
Ejecuta analizadores integrados en todo el módulo.
go vet ./...package main
import "fmt"
func main() {
fmt.Printf("%d", "not-a-number") // vet: discrepancia de formato en Printf
}Relacionado: go vet y diagnósticos comunes de analizadores - mensajes comunes
La calidad incluye el comportamiento, no solo las comprobaciones 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 en el mismo paquete (o en el paquete externo _test).go test compila las pruebas con el detector de carreras cuando pasas -race.Relacionado: Puertas de calidad de CI: Lint, Test, Race, Vuln - pipeline completo
Comprueba el formato sin escribir archivos (amigable para CI).
gofmt -l ..go está formateado.gofmt -w.git diff --exit-code después de formatear en hooks pre-commit.Relacionado: Hooks pre-commit y listas de verificación de revisiones - automatización local
Ejecuta el paquete de linters estándar.
golangci-lint run ./....golangci.yml después de que la línea base esté en verde.vet antes de perseguir pequeños detalles de estilo.Relacionado: Configuración de golangci-lint - patrones de archivos de configuración
check de MakefileUn comando para los colaboradores.
.PHONY: check
check:
gofmt -l . | tee /tmp/gofmt.out && test ! -s /tmp/gofmt.out
go vet ./...
go test ./...make checkmake check en README y CONTRIBUTING.golangci-lint run cuando el equipo esté listo.Relacionado: Mejores prácticas de linting y calidad de código - ritmo de adopción
Detecta carreras de datos que vet no encuentra.
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 ralentiza las pruebas y necesita más memoria; ejecútalo en la CI, no en cada guardado.Relacionado: Puertas de calidad de CI: Lint, Test, Race, Vuln - cuándo requerir race
go mod tidyMantén la metainformación del módulo consistente.
go mod tidy
git diff --exit-code go.mod go.sumgo.sum confirmadas.govulncheck para el escaneo de seguridad en el grafo ordenado.Relacionado: govulncheck para vulnerabilidades de dependencias - escaneo de CVE
Bloquea commits que fallan las comprobaciones 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
# enlazar con: ln -s ../../scripts/pre-commit.sh .git/hooks/pre-commitgolangci-lint a la CI si excede ~60s localmente.--no-verify) solo para emergencias.Relacionado: Hooks pre-commit y listas de verificación de revisiones - plantillas de hooks
Versiones de la pila: Esta página se escribió para Go 1.26.x (predeterminado Green Tea GC, go fix modernizers - verifica el parche en la compilación), chi (última versión - verifica en la compilación), gin (última versión - verifica en la compilación), echo (última versión - verifica en la compilación), google.golang.org/grpc (última versión - verifica en la compilación), sigs.k8s.io/controller-runtime (última versión - verifica en la compilación), kubebuilder (última versión - verifica en la compilación), tinygo (última versión - verifica los objetivos de la placa en la compilación), wazero (última versión - verifica en la compilación) y golangci-lint (última versión - verifica el conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 19 jul 2026