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 的一部分。