golangci-lint para Go: guía completa con ejemplos prácticos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

golangci-lint: Agregador de linters para Go

1. ¿Qué es y para qué sirve?

golangci-lint es un potente agregador de linters para el lenguaje Go que unifica decenas de herramientas populares de análisis estático de código en una única interfaz rápida y configurable. En lugar de instalar y ejecutar cada linter por separado (por ejemplo, vet, staticcheck, errcheck, gocyclo y muchos otros), el desarrollador obtiene un solo comando que los ejecuta todos en paralelo, almacena en caché los resultados y genera un informe unificado. Esto ahorra horas de configuración en CI/CD y en el desarrollo local.

¿Para qué sirve? En proyectos grandes de Go (microservicios, utilidades CLI, servidores web) es imposible mantener la calidad del código manualmente. Errores como no manejar correctamente los errores, variables sin usar, un formato incorrecto o posibles deadlocks pueden provocar fallos en producción. golangci-lint encuentra automáticamente estos problemas durante la revisión de código o en un hook pre-commit. También ayuda a mantener un estilo de código uniforme en el equipo, algo fundamental para la legibilidad y el mantenimiento.

Ventajas clave frente a ejecutar linters por separado: velocidad (los linters se ejecutan en paralelo y los resultados se almacenan en caché), flexibilidad (puedes activar o desactivar cualquier linter y configurar sus reglas mediante un archivo YAML), integración (funciona con IDEs, sistemas CI/CD y soporta go vet de serie) y formato de salida unificado (JSON, SARIF, texto con colores, para cualquier herramienta).

2. Instalación

La instalación de golangci-lint se puede realizar de varias maneras. La forma recomendada es mediante go install (requiere Go 1.18+):

go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest

Tras la instalación, el binario estará disponible en $GOPATH/bin (normalmente ~/go/bin). Verifica la instalación:

golangci-lint --version

Métodos alternativos (para CI/CD o si no tienes Go instalado):

  • Linux/macOS (curl): curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.55.2
  • macOS (Homebrew): brew install golangci-lint
  • Docker: docker run --rm -v $(pwd):/app -w /app golangci/golangci-lint:v1.55.2 golangci-lint run -v

3. Inicio rápido — ejemplo mínimo funcional

Crea un módulo Go simple y un archivo con un error intencionado:

mkdir miproyecto && cd miproyecto
go mod init miproyecto

Crea el archivo main.go:

package main

import "fmt"

func main() {
    x := 10
    fmt.Println("Hola")
    // Error: variable x sin usar
}

Ejecuta el linter:

golangci-lint run

La salida será similar a esta:

main.go:6:2: `x` is unused (deadcode)
    x := 10
    ^

El linter ha encontrado una variable sin usar. Corrige el código (elimina la línea x := 10) y ejecútalo de nuevo; no debería haber errores.

Para una verificación más estricta, usa las banderas -v (verbose) y --fast (solo linters rápidos):

golangci-lint run -v --fast

4. Comandos y opciones principales

A diferencia de una biblioteca, golangci-lint es una herramienta CLI. Sus "métodos" son comandos y banderas. Veamos 8 comandos y opciones clave.

4.1. run — ejecución principal de linters

Firma: golangci-lint run [banderas] [ruta]

Qué hace:

Recommendations