Notas de estudio de Go (73) - Herramienta de análisis de código estático de Go golangci-lint

Puede ser utilizado para Goel análisis de código lenguaje de implementación, hay muchos, como golint, gofmt, misspelletc. Si la configuración de las once de referencia, será bastante engorroso, por lo que normalmente no los usamos solo, pero el uso golangci-lint.

Dirección del sitio web oficial: https://github.com/golangci/golangci-lint

golangci-lintEs una herramienta integrada, integra muchas herramientas de análisis de código estático, fáciles de usar para nosotros. Al configurar esta herramienta, podemos habilitar de manera flexible las comprobaciones de especificación de código requeridas.

1. Instalación

Si desea utilizarlo golangci-lint, primero debe instalarlo. Debido a que en golangci-lintsí es un Golenguaje, podemos instalarlo desde el código fuente, abrir una terminal e ingresar el siguiente comando para instalar.

go get github.com/golangci/golangci-lint/cmd/[email protected]

Utilice este comando para instalar la versión v1.35.2 golangci-lint,

Si la instalación falla, use el siguiente comando:

# binary will be $(go env GOPATH)/bin/golangci-lint
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.35.2

Consulte https://blog.csdn.net/txl910514/article/details/105880125 si no se puede instalar correctamente

wohu@ubuntu:~$ curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.35.2
golangci/golangci-lint info checking GitHub for tag 'v1.35.2'
golangci/golangci-lint info found version: 1.35.2 for v1.35.2/linux/amd64
golangci/golangci-lint info installed /home/wohu/gocode/bin/golangci-lint
wohuh@ubuntu:~$ ls go

Si la instalación aún falla, use el siguiente método para descargar el código fuente y ejecutar el script de instalación

cd $GOPATH/src/github.com
git clone https://github.com/golangci/golangci-lint.git
cd golangci-lint/
chmod +x install.sh
sh install.sh -b $(go env GOPATH)/bin v1.38.0

Una vez completada la instalación, ingrese el siguiente comando en la terminal para verificar si la instalación es exitosa.

golangci-lint --version
golangci-lint has version 1.35.2 built from 1da5701 on 2021-01-11T02:54:03Z

2. Ejecutar

La instalación es exitosa golangci-lint, el código se puede verificar usándolo, el código de muestra

package main

import "os"

const name string = "wohu"
func main() {
    
    
    os.Mkdir("demo_test", 0755)
}

Ejecute el comando:

wohu@ubuntu:~/gocode/src$ golangci-lint run demo.go 
demo.go:5:7: `name` is unused (deadcode)
const name string = "wohu"
      ^
demo.go:7:13: Error return value of `os.Mkdir` is not checked (errcheck)
    os.Mkdir("demo_test", 0755)
            ^

Se puede ver en los resultados de la inspección de código que se han detectado ambos problemas de especificación de código. Una vez que se detectan los problemas, puede solucionarlos para que el código sea más compatible.

3. Configuración

golangci-lintLa configuración de es más flexible, por ejemplo, puede personalizar cuáles habilitar linter. golangci-lintLos linterque están habilitados por defecto incluyen estos:

  • código muerto-verificación de código muerto
  • errcheck: devuelve si se comprueba el error
  • gosimple-comprobar si el código se puede simplificar
  • comprobaciones sospechosas de código govet, como inconsistencias en cadenas de formato y tipos
  • ineffassign-comprobar si hay código no utilizado
  • staticcheck-control de análisis estático
  • structcheck-encuentra campos de estructura no utilizados
  • verificación de tipo de verificación
  • verificación de código no utilizado-no utilizado
  • varcheck-variables globales no utilizadas y comprobaciones constantes

Sugerencia: golangci-lintadmite más linter, puede ingresar un golangci-lint linterscomando de terminal para ver y puede ver todas las linterdescripciones.

Si desea modificar habilitado de forma predeterminada linter, debe golangci-lintconfigurar. Ese es un nuevo nombre en el directorio raíz del proyecto para .golangci.ymlel archivo, que es el golangci-lintarchivo de configuración. golangci-lintSe utilizará automáticamente al ejecutar comprobaciones de especificación de código . Solo puedo asumir que habilitar la unusedverificación, puede configurar:

.golangci.yml

linters:
  disable-all: true
  enable:
    - unused

En el desarrollo colaborativo de equipos multijugador, existe una golangci-lintversión fija que es muy importante, por lo que podemos examinar el código en base a los mismos criterios. Para configurar el golangci-lintuso de una versión relativamente simple, agregue el siguiente código al archivo de configuración:

service:
  golangci-lint-version: 1.32.2 # use the fixed version to not introduce new linters unexpectedly

Además, también puede habilitar para cada linterconfiguración, por ejemplo, para establecer el idioma para el corrector ortográfico US, puede utilizar la siguiente configuración de código:

linters-settings:
  misspell:
    locale: US

golangci-lintHay muchas configuraciones y puede configurarlas de manera flexible. Sobre golangci-lintmás configuración puede consultar la documentación oficial, y aquí le doy una configuración común, el código es el siguiente:

Archivo de configuración .golangci.yml

linters-settings:
  golint:
    min-confidence: 0
  misspell:
    locale: US
linters:
  disable-all: true
  enable:
    - typecheck
    - goimports
    - misspell
    - govet
    - golint
    - ineffassign
    - gosimple
    - deadcode
    - structcheck
    - unused
    - errcheck
service:
  golangci-lint-version: 1.32.2 # use the fixed version to not introduce new linters unexpectedly

4. Integración en CI

Las verificaciones de código deben estar integradas en el CIproceso, el efecto será mejor, por lo que cuando los desarrolladores envíen el código, CIlo verificará automáticamente, para identificar problemas y corregirlo.

Ya sea que esté usando Jenkins, o Gitlab CI, Github Actionpuede Makefileejecutar el camino golangci-lint. Ahora creo un proyecto en el directorio raíz del Makefilearchivo y agrego el siguiente código:

getdeps:
   @mkdir -p ${GOPATH}/bin
   @which golangci-lint 1>/dev/null || (echo "Installing golangci-lint" && go get github.com/golangci/golangci-lint/cmd/[email protected])
lint:
   @echo "Running $@ check"
   @GO111MODULE=on ${GOPATH}/bin/golangci-lint cache clean
   @GO111MODULE=on ${GOPATH}/bin/golangci-lint run --timeout=5m --config ./.golangci.yml
verifiers: getdeps lint

Supongo que te gusta

Origin blog.csdn.net/wohu1104/article/details/113751501
Recomendado
Clasificación