1. 程式人生 > 實用技巧 >【解決了一個小問題】golang中引用一個路徑較長的庫,導致goland中出現"module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v2"

【解決了一個小問題】golang中引用一個路徑較長的庫,導致goland中出現"module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v2"

在專案中的go.mod檔案中有這樣一句:

require (
   github.com/xxx-devops/xx1/sdk/go v2.2.3
)

專案的編譯沒有問題,但是goland中出現如下提示:

go: errors parsing go.mod:
D:/source/github/ahfuzhang/go.lib/go.mod:8: require github.com/xxx-devops/xx1/sdk/go: version "v2.2.3" invalid: module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v2

於是我換個寫法:

require (
   github.com/xxx-devops/xx1/sdk/go v2.2.3+incompatible
)

錯誤資訊變為:

go list -m: github.com/xxx-devops/xx1/sdk/[email protected]+incompatible: invalid version: +incompatible suffix not allowed: module contains a go.mod file, so semantic import versioning is required

解決的辦法如下:

require (
   github.com/xxx-devops/xx1/sdk/go/v2 v2.2.3
)

然後編譯,然後go.mod檔案變成了:

require (
	github.com/xxx-devops/xx1/sdk/go v0.0.0-20201126031658-a2b707072c79
	github.com/xxx-devops/xx1/sdk/go/v2 v2.2.3
)

然後註釋掉後面一行,搞定。

結論:
1.庫還是要避免太深的路徑
2.為什麼目錄中包含個v2,一定要寫到go.mod裡面去?這裡還沒搞懂