标签: golangci-lint

golangci-lint 重新安装后出现看不见的错误

我按照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 吗?

go golint golangci-lint

6
推荐指数
1
解决办法
2080
查看次数

golang linter 总是抱怨

问:如何解决ireturnnolintlintlinter 之间的这种疯狂问题?

细节:

我有一个带有此签名的 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)

static-analysis go golangci-lint

5
推荐指数
1
解决办法
3582
查看次数

无法在本地安装 golangci-lint

我使用的是 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)

我是不是少了一步?我怎样才能使这个本地安装工作?

shell go linter golangci-lint

5
推荐指数
1
解决办法
1万
查看次数

golangci-lint 未声明的名称:`getProxyURL`(类型检查)

我是 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)

typechecking go golangci-lint

5
推荐指数
0
解决办法
921
查看次数

Go line-length-linter:如何忽略一行?

我收到这个警告:

main.go:72: 行有 191 个字符 (lll) klog.Fatalf("no ...") //nolint:lll

我补充说nolint:lll,但这并不能消除这个警告。

我们使用https://golangci-lint.run/

我只想忽略这一行(无全局配置)。

go golangci-lint

5
推荐指数
1
解决办法
1万
查看次数

如何使用 GolangCI 删除未使用的导入

我使用 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)

makefile go goimports golangci-lint

5
推荐指数
1
解决办法
1349
查看次数