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

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

¿Qué es golangci-lint y para qué sirve?

\n\n

golangci-lint no es solo una biblioteca, sino un potente agregador de linters para el lenguaje de programación Go. Es una herramienta unificada que ejecuta múltiples analizadores de código estático populares (linters) simultáneamente, combinando sus resultados en un único informe claro. En esencia, es un "linter de linters".

\n\n

¿Para qué sirve? En el desarrollo moderno con Go, mantener la calidad del código es una tarea crítica. Los linters dispersos, como vet, staticcheck, errcheck, gocyclo y decenas de otros, cada uno con sus propias banderas y configuraciones, pueden convertir la configuración de CI/CD en una pesadilla. golangci-lint resuelve este problema proporcionando:

\n
    \n
  • Un único punto de entrada: Un solo comando ejecuta todos los linters configurados.
  • \n
  • Ejecución en paralelo: Los linters se ejecutan en paralelo, lo que acelera significativamente el proceso de análisis.
  • \n
  • Almacenamiento en caché: Los resultados se almacenan en caché, lo que hace que las ejecuciones repetidas (por ejemplo, al cambiar solo un archivo) sean prácticamente instantáneas.
  • \n
  • Configuración flexible: Es fácil habilitar/deshabilitar linters y configurar su comportamiento a través de un archivo YAML o argumentos de línea de comandos.
  • \n
  • Integración con IDE y CI/CD: Es compatible con la mayoría de los entornos de desarrollo modernos (VS Code, GoLand) y sistemas de integración continua (GitHub Actions, GitLab CI, Jenkins).
  • \n
\n

El uso de golangci-lint ayuda a los equipos a detectar automáticamente errores potenciales, problemas de estilo, código no utilizado, problemas de rendimiento y seguridad en las primeras etapas del desarrollo, lo que conduce a un código más confiable y mantenible.

\n\n

Instalación de golangci-lint

\n\n

A diferencia de las bibliotecas Go comunes, golangci-lint se instala como un archivo ejecutable binario, no se importa en el código. Existen varias formas de instalarlo:

\n\n

1. Instalación rápida (recomendada para CI/CD)

\n

La forma más sencilla y preferida es usar el script de instalación:

\n
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.59.1
\n

Nota: Reemplace v1.59.1 con la versión actual de GitHub Releases.

\n\n

2. Instalación a través de go install

\n

Si tiene Go versión 1.21 o superior instalado:

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

3. Instalación a través de gestores de paquetes (macOS/Linux)

\n

macOS (Homebrew):

\n
brew install golangci-lint
\n

Linux (Snap):

\n
sudo snap install golangci-lint --classic
\n\n

4. Verificación de la instalación

\n

Después de la instalación, verifique que todo funcione:

\n
golangci-lint --version
\n

Debería ver algo como: golangci-lint has version 1.59.1 built from ...

\n\n

Inicio rápido con un ejemplo de código

\n\n

Vamos a crear un proyecto Go simple y ejecutar golangci-lint en él.

\n\n

Paso 1: Cree el proyecto

\n
mkdir my-lint-project\ncd my-lint-project\ngo mod init my-lint-project
\n\n

Paso 2: Escriba código "malo"

\n

Cree un archivo main.go:

\n
package main\n\nimport (\n    "fmt"\n    "io/ioutil" // deprecated\n    "log"\n)\n\nvar unusedGlobalVar = 42 // variable no utilizada\n\nfunc main() {\n    x := 10 // variable no utilizada\n    fmt.Println("Hello")\n    readFile("test.txt")\n}\n\nfunc readFile(path string) {\n    data, err := ioutil.ReadFile(path) // el error no se maneja\n    if err != nil {\n        log.Fatal                    

Recommendations