1.golangci-lint是什么
golangci-lint按照官方的说法是用于go语言的代码静态检查工具集(因为包含它多种 Go 代码检查工具)。
特性:
1.快速:并行非执行 linters,可以复用 Go构建cache和caches分析结果
2.配置文件基于yaml语法进行配置
3.可以与常见开发工具集成,例如:VS Code、Sublime、Goland、Emacs、Vim、Atom、Github Actions
4.包含了很多 linters,不需要安装
5.执行结果输出带有美观,不仅带有颜色,还有源码行号和标识
6.尽可能的减少误报,可以通过设置忽略某些模式
2.Goland 中集成 golangci-lint
针对不同的开发工具,官方给出了不同的集成方式,本文暂时只讲解一下 golangci-lint 在 Goland 中的两种集成方式。
golangci-lint 的安装
安装 golangci-lint 常用的方式主要有2种:
1.二进制方式安装
# macos
brew install golangci-lint
brew upgrade golangci-lint
# linux and windows
# 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.46.2
golangci-lint --version
2.源码方式安装
# Go 1.16+
go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.46.2
# Go version < 1.16
go get -u github.com/golangci/golangci-lint/cmd/golangci-lint@v1.46.2
go install/go get
安装不保证能正常工作,官方建议使用二进制安装
File Watcher 方式
通过 Plugins 安装插件

Tools -> File Watchers


External Tools 方式

配置好之后,在菜单栏 或 右键可以看到 External Tools 中多了一个 golint 选项,点击 golint即可。

3.golangci-lint 的使用
在项目根路径下面执行 golangci-lint run
就可以检查整个项目的代码。
golangci-lint run
# 等价于
golangci-lint run ./...
# 其他用法
golangci-lint run dir1 dir2/... dir3/file1.go
指定目录时不会递归分析其子目录,要递归分析其子目录需要加上 /...
。
没有配置文件时,golangci-lint 使用默认的代码检查器进行检查。
# 查看默认启用和关闭了哪些检查器
golangci-lint help linters
4.排除代码检查
通过注释可以跳过代码检查,使用方式如下:
var bad_name int //nolint
var bad_name int //nolint:golint,unused
//nolint
func allIssuesInThisFunctionAreExcluded() *string {
// ...
}
//nolint:govet
var (
a int
b int
)
或者忽略对整个文件进行检查
//nolint:unparam
package pkg
5.配置文件
golangci-lint 会自动在当前目录下查找以下名称的配置文件:
.golangci.yml
.golangci.yaml
.golangci.toml
.golangci.json
配置包含不同的 options,每个 options 的作用各不相同,生产环境则可以根据实际情况进行不同的配置。
# 检测基本配置
# Options for analysis running.
run:
# See the dedicated "run" documentation section.
option: value
# output configuration options
output:
# See the dedicated "output" documentation section.
option: value
# 修改某个特定linter的设置
# All available settings of specific linters.
linters-settings:
# See the dedicated "linters-settings" documentation section.
option: value
# 开启/关闭 某个linter
linters:
# See the dedicated "linters" documentation section.
option: value
issues:
# See the dedicated "issues" documentation section.
option: value
severity:
# See the dedicated "severity" documentation section.
option: value
例如,在 linters 中配置启用、关闭不同的检查工具。
linters:
disable-all: true
enable:
- megacheck
- govet
enable-all: true
disable:
- maligned
- prealloc
presets:
- bugs
- unused
fast: false
本文链接:https://ivansli.com/archives/563/
本文系原创作品,版权所有(禁止转载)