go vet detecta código sospechoso que el compilador acepta, y go fix aplica reescrituras automáticas, incluyendo los modernizadores de Go 1.26 que actualizan patrones heredados a los modismos actuales.
El análisis estático en Go comienza en la biblioteca estándar: go vet incluye analizadores para errores comunes como verbos Printf mal formateados y código inalcanzable.
go fix ejecuta los fixers registrados con el mismo framework de análisis, reescribiendo las fuentes en su lugar cuando es seguro.
Go 1.26 amplía go fix con modernizadores para patrones como la captura de variables de bucle obsoleta y APIs desaprobadas.
Los equipos añaden golangci-lint y staticcheck encima para reglas más amplias, pero vet/fix siguen siendo la línea base de configuración cero que cada módulo puede ejecutar.
Tarjeta de referencia rápida - lista para copiar y pegar.
# Ejecuta los analizadores vet predeterminados en todos los paquetesgo vet ./...# Previsualiza las reescrituras de modernizadores sin escribir archivosgo fix -diff ./...# Aplica modernizadores y revisa en git diffgo fix ./...# Ejecuta un analizador específico (ejemplo: printf)go vet -printf=false -assign ./...
Cuándo usar esto:
Ejecuta go vet ./... en CI en cada PR junto con las pruebas.
Ejecuta go fix -diff después de actualizar Go para ver las sugerencias de modernizadores antes de aplicarlas.
Añade analizadores personalizados a través de golang.org/x/tools/go/analysis para reglas específicas de la organización.
Utiliza golangci-lint cuando necesites docenas de linters con configuración compartida.
// antes del modernizador: captura de variable de bucle en closure (riesgo estilo pre-1.22)package workerfunc Jobs() []func() int { ids := []int{1, 2, 3} var fns []func() int for _, id := range ids { fns = append(fns, func() int { return id }) } return fns}
go vet ./...go fix -diff ./...go fix ./...go test ./...
// después del modernizador go fix (ilustrativo - la reescritura exacta depende de la versión del analizador)package workerfunc Jobs() []func() int { ids := []int{1, 2, 3} var fns []func() int for _, id := range ids { id := id // el modernizador puede insertar una copia de sombra donde todavía se necesite fns = append(fns, func() int { return id }) } return fns}
Lo que esto demuestra:
go vet marca construcciones que compilan pero se comportan de forma extraña.
go fix -diff muestra los parches antes de confirmarlos.
Los modernizadores se dirigen a modismos que cambiaron a lo largo de las versiones de Go.
Las pruebas confirman el comportamiento después de las ediciones automatizadas.
Ambos comandos cargan paquetes con go/packages, los verifican sintácticamente y luego ejecutan pases de análisis registrados a través de analysis.Analyzer.
go vet informa diagnósticos a stderr y sale con un código distinto de cero cuando existen problemas.
go fix ejecuta analizadores que implementan SuggestedFix y escribe archivos fuente actualizados.
El controlador de análisis respeta las etiquetas de compilación y los límites de módulos de la misma manera que go test.
Aplicar go fix sin pruebas - los modernizadores pueden cambiar la semántica en casos extremos. Solución:go test ./... completo y benchmarks dirigidos después de cada pase de fix.
Asumir que vet reemplaza a los linters - vet es intencionalmente pequeño. Solución: añade staticcheck y golangci-lint para reglas de seguridad y rendimiento.
Deshabilitar vet globalmente en CI - los equipos olvidan volver a habilitarlo. Solución: deshabilita analizadores específicos con flags, no go vet en sí.
Analizadores personalizados sin pruebas - los falsos positivos erosionan la confianza. Solución: envía pruebas de analizadores con el paquete analysistest.
Ejecutar fix en código generado - los generadores sobrescriben las correcciones en la siguiente ejecución. Solución: excluye vendor/ y directorios generados; corrige las entradas o plantillas en su lugar.
Ignorar errores de vet en archivos cgo - cgo confunde algunas verificaciones. Solución: reduce el alcance del paquete o usa etiquetas de compilación para dividir paquetes cgo.
Versiones de Stack: Esta página fue escrita para Go 1.26.x (predeterminado de GC de Green Tea, modernizadores de go fix - verifica el parche en la compilación), chi (última - verifica en la compilación), gin (última - verifica en la compilación), echo (última - verifica en la compilación), google.golang.org/grpc (última - verifica en la compilación), sigs.k8s.io/controller-runtime (última - verifica en la compilación), kubebuilder (última - verifica en la compilación), tinygo (última - verifica los objetivos de la placa en la compilación), wazero (última - verifica en la compilación) y golangci-lint (última - verifica el conjunto de linters en la compilación).
cGJxcnRodnFyZi52YnxwdHZiNDYzfDIwMjYwNw==
Revisado por Chris St. John·Última actualización: 19 jul 2026