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