[英]File is not `goimports`-ed with -local somePath
我在 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"
這是代碼的鏈接。
僅僅進行正常的Sort imports
可能不起作用。 我認為你已經啟用了local-prefixes
的goimports
,這就是為什么錯誤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
)
這些不必分在 3 個組中,您可以有 3 個以上的組。 只要確保以上 3 種(或 2 種)不在同一個中即可。
使固定
當您運行goimports
時,請確保您使用-local
標志運行它。 我認為你也可以配置你的 IDE 來做到這一點。 在您的情況下,它應該看起來像這樣:
goimports -local "github.com/GoogleContainerTools/skaffold" -w .
-w標志,以便將更改寫回
. (點)用於所有文件,或者您可以只指定一個文件
就我而言,我不得不改變這個:
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
"strconv"
)
對此:
import (
"fmt"
"net/http"
"strconv"
"github.com/gin-gonic/gin"
)
goimports
有一個問題來排序這樣的事情:
import (
"context"
"github.com/gofrs/uuid"
"github.com/pkg/errors"
"github.com/shopspring/decimal"
"io"
)
它會照原樣生活。 為了使其格式化和 linter 可接受,您可以嘗試這個第三方來修復包導入順序: https ://github.com/incu6us/goimports-reviser
例子:
import (
"log"
"github.com/incu6us/goimports-reviser/testdata/innderpkg"
"bytes"
"github.com/pkg/errors"
)
import (
"bytes"
"log"
"github.com/pkg/errors"
"github.com/incu6us/goimports-reviser/testdata/innderpkg"
)
我查看了您的代碼,顯然問題在於您的導入。 您必須對文件應用goimports
命令才能正確排序導入(或者如果您使用 Goland,則可以使用 IDE 工具完成)。
有關 Goland 集成的信息: https ://www.jetbrains.com/help/go/integration-with-go-tools.html
我遇到了同樣的錯誤。 棉絨是golangci-lint
。
我對導入進行了排序(使用 GoLand),整理了依賴項( go mod tidy
)並刪除了空格( gofmt -w app.go
)。
除了:
golangci-lint run --fix
只需按照2個步驟,它會正常工作: -
goimports
,運行:-go 安裝 golang.org/x/tools/cmd/goimports@latest
goimports -w 文件名.go
有時刪除(部分)評論塊是唯一的解決方法。 例如,這導致了我擁有的一個文件中的問題,而goimports -w...沒有解決任何問題:
// Example usage:
//
// const tracePrefix = "storage"
//
// func FuncName(ctx context.Context, ...) {
// fSpan, ctx := opentracing.StartSpanFromContext(ctx, CurrentFuncName(tracePrefix))
// fSpan.SetTag("company_uuid", jwt.CompanyUUID)
// defer fSpan.Finish()
// ...
// }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.