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