Puede ser utilizado para Go
el análisis de código lenguaje de implementación, hay muchos, como golint
, gofmt
, misspell
etc. 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-lint
Es 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-lint
sí es un Go
lenguaje, 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-lint
La configuración de es más flexible, por ejemplo, puede personalizar cuáles habilitar linter
. golangci-lint
Los linter
que 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-lint
admite máslinter
, puede ingresar ungolangci-lint linters
comando de terminal para ver y puede ver todas laslinter
descripciones.
Si desea modificar habilitado de forma predeterminada linter
, debe golangci-lint
configurar. Ese es un nuevo nombre en el directorio raíz del proyecto para .golangci.yml
el archivo, que es el golangci-lint
archivo de configuración. golangci-lint
Se utilizará automáticamente al ejecutar comprobaciones de especificación de código . Solo puedo asumir que habilitar la unused
verificación, puede configurar:
.golangci.yml
linters:
disable-all: true
enable:
- unused
En el desarrollo colaborativo de equipos multijugador, existe una golangci-lint
versión fija que es muy importante, por lo que podemos examinar el código en base a los mismos criterios. Para configurar el golangci-lint
uso 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 linter
configuració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-lint
Hay muchas configuraciones y puede configurarlas de manera flexible. Sobre golangci-lint
má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 CI
proceso, el efecto será mejor, por lo que cuando los desarrolladores envíen el código, CI
lo verificará automáticamente, para identificar problemas y corregirlo.
Ya sea que esté usando Jenkins
, o Gitlab CI
, Github Action
puede Makefile
ejecutar el camino golangci-lint
. Ahora creo un proyecto en el directorio raíz del Makefile
archivo 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