电话
400 9058 355
本文详解 gopath 设置后仍报“$gopath not set”错误的根本原因——`sudo` 会重置用户环境变量,导致 gopath 不生效;同时说明 `go get` 和 `go install` 权限问题的区分处理方式。
在 macOS(或其他类 Unix 系统)中,即使你已正确在 ~/.bash_profile 中设置 export GOPATH=$HOME/gocode,并能通过 go env 验证 GOPATH 显示正常,执行命令时仍可能遇到如下错误:
$ sudo go get -u github.com/golang/lint/golint package github.com/golang/lint/golint: cannot download, $GOPATH not set.
根本原因在于:sudo 默认会丢弃当前用户的环境变量(包括 GOPATH),转而使用 root 用户的最小安全环境。此时 go get 实际运行在 root 环境下,而 root 的 $HOME 和 GOPATH 均未配置,因此 Go 工具链无法定位工作空间。
✅ 正确做法是:完全避免对 go get 使用 sudo。
Go 的模块下载与构建默认写入用户目录(如 $GOPATH/bin、$GOPATH/pkg),这些路径本就属于当前用户,无需提权:
# ✅ 推荐:直接运行(确保 $GOPATH/bin 已加入 $PATH) go get -u github.com/golang/lint/golint # 检查是否安装成功 which golint # 应输出类似 /Users/wildcat/gocode/bin/golint
⚠️ 注意事项:
export PATH="$PATH:$GOPATH/bin"
sudo rm -rf $GOPATH/src/github.com/golang/lint sudo rm -f $GOPATH/bin/golint
? 特殊情况:go install 报 permission denied(如 cover 工具)
当执行类似命令时:
go install golang.org/x/tools/cmd/cover # open /usr/local/go/pkg/tool/darwin_amd64/cover: permission denied
该错误与 GOPATH 无关,而是因为 go install 尝试将二进制写入 Go 安装目录下的 GOTOOLDIR(即 /usr/local/go/pkg/tool/...),而该路径受系统保护,普通用户无写权限。
✅ 解决方案(二选一):
GO111MODULE=on go install golang.org/x/tools/cmd/cover@latest
sudo env "PATH=$PATH" "GOPATH=$GOPATH" go install golang.org/x/tools/cmd/cover
? 总结:
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...