輸出該問題時說明在 Go 語言的啟動編譯(Build)階段,出現(xiàn)了編譯問題,往往是編譯配置的問題??梢酝ㄟ^以下思路去排查對應的錯誤。
一、查看 go env ??????
(1)首先可以查看被排除的 Go 文件是否啟用了條件編譯,通常的形式為在文件的首行添加(以 Linux 為例):
// +build linux
// 或
//go:build linux
// +build
會逐漸取代 //go:build
,但 go 1.16 之前的版本只支持 //go:build
。加上上述條件編譯后,該 Go 文件將只在 Linux 操作系統(tǒng)環(huán)境下才會被編譯,若是 MacOS 和 Windows 環(huán)境下將無法被編譯。解決方案是在 go env 和代碼編輯器中都配置好 GOOS 參數(shù)(VSCode 在左下角的 GO/env 中設置;GoLand 在左上角的 settings 中配置)。
go env -w GOOS=linux
(2)若非操作系統(tǒng)環(huán)境的問題,接著考慮是否有交叉編譯,即在 Go 語言編譯時調(diào)用了其他語言的情況,一般是 C 語言。此時需要在 go env 中開啟 CGO_ENABLED 特性。這樣在進行 go build 時,就會在編譯和鏈接階段啟動 gcc 編譯器。(經(jīng)評論指出,開啟 CGO_ENABLED 需要下載對應操作系統(tǒng)的 gcc 庫)
go env -w CGO_ENABLED=1
二、依賴包的依賴是否未導入 ??
在 go 的舊版本中基于 GOPATH 來尋找依賴,但可能依賴包的依賴未導入,可以考慮打開 GO111MODULE,實現(xiàn)模塊支持。go 命令行會使用modules,而完全不去 GOPATH 目錄下查找模塊。文章來源:http://www.zghlxwxcb.cn/news/detail-608502.html
go env -w GO111MODULE=on
三、是否存在重復依賴的情況 ??
這是我最終排查出的錯誤,因為在 GoLand 的 settings 中可以存在三個 GOPATH,分別是 Global、Project 和 Module 的 GOPATH。
Global 在 go env 中配置,Project 是項目的 GOPATH。若配置了多個 GOPATH,在導入二方或三方包時,可能在多個 GOPATH 下都有對應的緩存模塊,即重復依賴。此時需要刪除多余的 GOPATH。文章來源地址http://www.zghlxwxcb.cn/news/detail-608502.html

到了這里,關(guān)于【Golang】排查 Build constraints exclude all the go files 的幾個思路的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!