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` 報告 `"Fetching https://runtime/cgo?go-get=1"`?
如果您有原始碼分發,請確保您的包是最新的。同時仔細檢查上面的環境。
交叉編譯時,我收到 `"runtime/extern.go:135: undefined: theGoos"`
閱讀 WindowsCrossCompiling 以獲取一些有用的指令碼。您也可以在透過 `make.bash` 構建交叉編譯工具鏈時使用 `--no-clean` 引數。
為什麼 `go get` 對某些包有效,但對其他一些包報告 `$GOROOT` 中的 `permission denied`(`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 的一部分。