我在 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
只是做正常Sort imports
可能不会奏效。我认为您启用了goimports
linting 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)代表所有文件,或者您可以只指定一个文件
就我而言,我必须改变这一点:
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)
当您的 IDE 和 linter 对导入进行排序的设置不同时,通常会出现此问题。我使用GoLand IDE 和golangci-lint作为 linter。我按照下图更改了 IDE 设置以使用goimports代替gofmt ,它为我解决了这些错误。