我按照https://go.dev/doc/installgo上的说明将 的版本升级到 go1.18.3 :
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
Run Code Online (Sandbox Code Playgroud)
然后我尝试为我的go项目运行Makefile,但提示未安装golangci-lint。我认为这是由于rm -rf /usr/local/go所有软件包都被删除了,或者我在升级过程中以某种方式弄乱了文件。我继续安装 golangci-lint:
go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.46.2
Run Code Online (Sandbox Code Playgroud)
报告了许多以前未见过的错误。喜欢
could not import math/bits (-: could not load export data: cannot import "math/bits" (unknown iexport format version 2), export data is newer version - update tool)'
undeclared name: `yaml
...
Run Code Online (Sandbox Code Playgroud)
我很困惑,因为该项目过去在 lint 检查后编译成功。我应该降级 gplangci-lint 吗?
问:如何解决ireturn和nolintlintlinter 之间的这种疯狂问题?
细节:
我有一个带有此签名的 Golang 函数
func NewClientCredentialsTokenSource(
issuer string,
clientId string,
clientSecret string,
scope []string,
) (oauth2.TokenSource, error) {
Run Code Online (Sandbox Code Playgroud)
当我运行 golangci-lint v1.43.0 时,它报告
golangci-lint run
oidc/token_utils.go:19:1: NewClientCredentialsTokenSource returns interface (golang.org/x/oauth2.TokenSource) (ireturn)
func NewClientCredentialsTokenSource(
Run Code Online (Sandbox Code Playgroud)
由于该函数只有两个返回参数,因此很容易推断出它是在抱怨,oauth2.TokenSource而不是在抱怨error。
by 调用的下游函数NewClientCredentialsTokenSource返回一个实例,oauth2.TokenSource因此我没有要返回的具体类型。没办法,只能返回oauth2.TokenSource接口了。
所以我向函数添加了一个 lint 异常,如下所示:
//nolint:ireturn
func NewClientCredentialsTokenSource(
issuer string,
clientId string,
clientSecret string,
scope []string,
) (oauth2.TokenSource, error) {
Run Code Online (Sandbox Code Playgroud)
您可能认为这应该可以解决问题,但事实并非如此!现在报告了一个新的 lint 问题:
golangci-lint run
oidc/token_utils.go:19:1: directive `//nolint:ireturn` is unused for …Run Code Online (Sandbox Code Playgroud) 我使用的是 RHEL 8.6,我的 Go 版本如下:
$ go version
go version go1.18.3 linux/amd64
Run Code Online (Sandbox Code Playgroud)
我正在尝试在本地安装,但文档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/golangci-lint info checking GitHub for tag 'v1.46.2'
golangci/golangci-lint info found version: 1.46.2 for v1.46.2/linux/amd64
golangci/golangci-lint info installed /home/acabista/go/bin/golangci-lint
$ golangci-lint --version
bash: golangci-lint: command not found...
Run Code Online (Sandbox Code Playgroud)
第二:
$ go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.46.2
$ golangci-lint --version
bash: golangci-lint: command not found...
Run Code Online (Sandbox Code Playgroud)
我是不是少了一步?我怎样才能使这个本地安装工作?
我是 golang 新手,我正在尝试测试我的代理函数,测试正确通过,但是在运行 golangci 时,它给了我错误:
未声明的名称:(getProxyURL类型检查) if got := getProxyURL(tt.args.campaignCode, urls); 得到!= tt.想要 { ^
func getProxyURL(campaignCode string, urls map[string]string) string {
if campaignURL, ok := urls[campaignCode]; ok {
return campaignURL
}
return "https://facebook.com"
}
Run Code Online (Sandbox Code Playgroud)
_测试
package main
import "testing"
func Test_getProxyURL(t *testing.T) {
type args struct {
campaignCode string
}
urls := make(map[string]string, 0)
urls["82383b80-056b-42e8-b192-9b0f33c4f46e"] = "https://google.com"
urls["negativeTest"] = "https://facebook.com"
tests := []struct {
name string
args args
want string
}{
{
name: "Given an invalid campaign …Run Code Online (Sandbox Code Playgroud) 我收到这个警告:
main.go:72: 行有 191 个字符 (lll) klog.Fatalf("no ...") //nolint:lll
我补充说nolint:lll,但这并不能消除这个警告。
我们使用https://golangci-lint.run/
我只想忽略这一行(无全局配置)。
我使用 makefile 在 GolangCI 工具中启用了 goimports,它能够发现未使用的导入,但不会自动删除它们。如何让我的 golangCI 工具自动删除未使用的导入?
下面是我的 golangci linting 的 makefile 命令,我使用的是标签--fix:
##@ Linting
lint:
@echo "lint via golangci-lint in " $(OUTPUT_DIR)/src
docker run --rm -v $(PWD):/local \
-w /local golangci/golangci-lint:latest \
golangci-lint run --fix --config .golangci.yaml $(OUTPUT_DIR)/src/*.go
Run Code Online (Sandbox Code Playgroud)
下面是我的 golangci.yaml 文件,我设置remove-unused为 true :
run:
timeout: 5m
modules-download-mode: readonly
linters:
enable:
- errcheck
- goimports
- revive
- govet
- staticcheck
# Configuration for the goimports linter
goimports:
# Set to true to remove unused …Run Code Online (Sandbox Code Playgroud)