goroot应设为go安装根目录(如/usr/local/go),gopath应设为独立工作区(如$home/projects/go),二者不可混用;需将$goroot/bin和$gopath/bin均加入path,且gopath仅首路径生效。

GOROOT 和 GOPATH 到底该设成什么
GOROOT 指向 Go 安装根目录,不是你的项目目录;GOPATH 才是你写代码、放依赖、编译产出的地方。很多人误把 GOPATH 设成 $HOME/go,结果和 GOROOT 冲突,导致 go get 失败或模块行为异常。
推荐做法:GOROOT 固定为解压后的 Go 源码或二进制安装路径(如 $HOME/go),而 GOPATH 单独设为开发工作区,比如 $HOME/Projects/go 或 $HOME/Applications/Go —— 后者正是 goERP 文档里明确建议的路径。
-
GOPATH可以是多个路径,用:分隔,但go get只往第一个路径写包 - Go 1.11+ 默认启用 module 模式,
GOPATH对依赖管理影响变小,但go install生成的可执行文件仍默认落在$GOPATH/bin - 如果只用 module,不写
GOPATH也能跑,但命令行工具(如payload-dumper-go)编译后想全局调用,还是得靠$GOPATH/bin在PATH里
环境变量写进哪个 shell 配置文件
Linux 下多数人改 $HOME/.bashrc,但如果你用的是 zsh(macOS Catalina 及之后默认)、fish 或其他 shell,.bashrc 不会被自动加载。直接运行 echo $SHELL 看当前 shell,再对应修改:
- bash →
~/.bashrc或~/.profile - zsh →
~/.zshrc - fish →
~/.config/fish/config.fish
写完别忘了执行 source ~/.bashrc(或对应文件),否则新终端才能生效。光 source 一次只对当前终端有效,重启终端或新开 tab 才能验证是否持久。
PATH 里漏掉 $GOPATH/bin 就找不到 go install 的命令
像 NCMconverter 或 payload-dumper-go 这类工具,用 go install 编译后,默认输出到 $GOPATH/bin。如果你没把这一路径加进 PATH,就会遇到 command not found 错误,哪怕编译成功了也运行不了。
检查方式:运行 go env GOPATH 得到路径,再确认 $PATH 是否包含 $GOPATH/bin。常见错误写法是只写 export PATH=$PATH:$GOROOT/bin,漏了 $GOPATH/bin。
- 正确顺序建议:先加
$GOROOT/bin(让go命令可用),再加$GOPATH/bin(让自建工具可用) - 避免硬编码路径,用变量引用更安全:
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin - 如果用了多个 GOPATH,
go install只认第一个,所以$GOPATH/bin也只有一个有效位置
go env 显示的 GOMODCACHE 是哪来的
Go 1.11+ 开启 module 后,依赖包不再下载到 $GOPATH/src,而是统一存放在 $GOMODCACHE(默认是 $GOPATH/pkg/mod)。这个路径不参与 PATH 设置,但会影响磁盘空间和代理配置。
它不能随便删——删了下次 go build 会重新下载所有依赖;但可以清空(go clean -modcache)来腾空间。如果你用国内镜像,记得同时配好 GOPROXY,否则 go mod download 会卡在 google.golang.org。
-
GOMODCACHE路径由go env输出,不可直接修改环境变量覆盖,要改必须通过go env -w GOMODCACHE=xxx - 某些 CI 环境会临时设
GOPATH为 /tmp,但GOMODCACHE若没同步重定向,就会写进用户家目录,导致权限或空间问题 - 多项目共用一个
GOMODCACHE是设计使然,不是 bug —— 它本就是全局缓存
$GOPATH/bin 是否真在 PATH 里。很多“明明装好了却找不到 go 命令”的问题,根源都在这两处。golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











