簡體   English   中英

文件未使用 -local somePath 進行“goimports”編輯

[英]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-prefixesgoimports ,這就是為什么錯誤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

當您的 IDE 和 linter 有不同的設置來對導入進行排序時,通常會出現此問題。 我使用GoLand IDE 和golangci-lint作為 linter。 根據下圖,我更改了 IDE 設置以使用goimports代替gofmt ,它為我解決了這些錯誤。

Goland 編輯器設置

只需按照2個步驟,它會正常工作: -

  1. 在本地安裝goimports ,運行:-

go 安裝 golang.org/x/tools/cmd/goimports@latest

  1. 然后對於每個文件運行: -

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM