Go Wiki: 安装故障排除
介绍
您可能在许多情况下安装 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
,要么是将 GOROOT
本身包含在 GOPATH
中),那么 $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 的一部分。