文件不是带有 -local somePath 的 `goimports`-ed

pra*_*ant 6 go

我在 Golang 项目中做了一些更改,然后运行make test它负责linting 、格式化和单元测试。但是当它运行 linter.sh 时,它会抛出以下错误

pkg/skaffold/kubernetes/wait.go:23: File is not `goimports`-ed with -local github.com/GoogleContainerTools/skaffold (goimports)
        "github.com/GoogleContainerTools/skaffold/pkg/skaffold/kubectl"
Run Code Online (Sandbox Code Playgroud)

这是代码的链接。

rus*_*net 21

我遇到了同样的错误。棉绒是golangci-lint

我对导入进行了排序(使用 GoLand),整理了依赖项(go mod tidy)并删除了空格(gofmt -w app.go)。

除了以下之外没有任何作用:

golangci-lint run --fix


len*_*sda 9

只是做正常Sort imports可能不会奏效。我认为您启用了goimportslinting local-prefixes,这就是错误的原因File is not 'goimports'-ed with -local ...

通常goimports以某种方式对导入的库进行排序,以便标准 pkg 和其他库位于一个单独的组中。但是,当您启用本地前缀时,linting 需要标准 pkg、第 3 方 pkg 和具有指定本地前缀的 pkg(在您的情况下github.com/GoogleContainerTools/skaffold,也就是您自己的项目 pkg),这 3 种类型在不同的组中。(参考:https : //github.com/golangci/golangci-lint/issues/209

import (
  // stdlib

  // third-party

  // other packages of that project
)
Run Code Online (Sandbox Code Playgroud)

这些不必在 3 个组中,您可以有 3 个以上的组。只需确保以上 3 种(或 2 种)不在同一种类型中。

使固定

当您运行时,请goimports确保使用-local标志运行它。我认为您也可以配置您的 IDE 来做到这一点。在你的情况下,它应该是这样的:

goimports -local "github.com/GoogleContainerTools/skaffold" -w .
Run Code Online (Sandbox Code Playgroud)

-w标志,以便将更改写回

. (dot)代表所有文件,或者您可以只指定一个文件


Tad*_*dej 7

就我而言,我必须改变这一点:

import (
    "fmt"
    "github.com/gin-gonic/gin"
    "net/http"
    "strconv"
)
Run Code Online (Sandbox Code Playgroud)

对此:

import (
    "fmt"
    "net/http"
    "strconv"

    "github.com/gin-gonic/gin"
)
Run Code Online (Sandbox Code Playgroud)


Rah*_*arg 6

当您的 IDE 和 linter 对导入进行排序的设置不同时,通常会出现此问题。我使用GoLand IDE 和golangci-lint作为 linter。我按照下图更改了 IDE 设置以使用goimports代替gofmt ,它为我解决了这些错误。

Goland 编辑器设置