Go Wiki:InstallTroubleshooting

簡介

您可能曾多次安裝 Go(從原始程式碼或二進位發行版),結果事情不如預期。此頁面旨在收集一些關於相對常見或難以診斷的問題的常見知識,並提供提示和解決方案。

內容

提示

環境變數

有幾個環境變數可以設定,以設定您的 Go 安裝:請參閱 https://pkg.go.dev/cmd/go#hdr-Environment_variables

通常無需設定任何變數。

這表示,GOROOT 的預設值是您的 Go 安裝目錄。GOPATH 的預設值是您家目錄中名為「go」的目錄。GOPATH 目錄不應設定為包含 GOROOT 目錄,也不應該包含它。

如果您已在家目錄中的「go」目錄中安裝 Go,執行 go 工具會印出一則警告。您應移動物件 Go 安裝或將 GOPATH 環境變數設定為其他目錄。

例如,在 Unix 系統上

> go run hello.go
warning: GOPATH set to GOROOT (/home/username/go) has no effect
Hello, world
> GOPATH=/home/username/gopath
> export GOPATH
> go run hello.go
Hello, world

疑難排解

go build 命令完全沒有作用!

go build 命令只會產生一個二進位檔;如果你在封包目錄中執行 go build,它將正常地組建封包(並報告任何編譯錯誤),但它不會安裝它。對此,請使用 go install。如果你認為自己正在組建一個二進位檔,但沒有產生二進位檔,請確定你位於 main 封包中,且沒有設定 GOBIN。

為什麼 go get 會回報 「正在擷取 https://runtime/cgo?go-get=1」

如果你有一個原始碼發行版,請確定你的封包是最新的。另外,再次檢查上述環境。

當跨編譯時,我得到 「runtime/extern.go:135: 未定義: theGoos」

閱讀 WindowsCrossCompiling 以取得一些有用的指令碼。你也可以在你透過 make.bash 組建跨編譯工具鏈時使用 --no-clean 參數。

為什麼 go get 會對一些封包運作良好,而對其他封包則在 $GOROOT 中回報 存取權限遭拒(且 GOPATH 設定適當)?

如果你在任一時間點於 GOROOT 中安裝該封包(不設定 GOPATH,或於 GOPATH 中包含 GOROOT 本身),則 $GOROOT 中可能仍然會有一個目錄(它會首先被檢查)來覆寫你的 GOPATH。為驗證,請執行 go list -f {{.Dir}} importpath,如果它在 $GOPATH 下報告一個目錄,請嘗試先刪除該目錄。

仍然需要協助嗎?

請在 IRC 上造訪我們,或在郵寄清單中詢問。你將需要提供以下指令的輸出,以及你得到的任何錯誤

Linux/Darwin

go version
go env
env | grep GO

Windows

go version
go env
set | findstr GO

此內容是 Go Wiki 的一部分。