Ubuntu 上的 GOPATH:如何不让自己(和代码)崩溃
您很可能遇到过这种情况:刚在 Ubuntu 上安装好 Go,打开终端,输入 go run main.go,结果却一片寂静。或者更糟的是,满屏红色错误,都提到了 GOPATH。如果您曾搜索过这个问题,那么几乎肯定见过 Stack Overflow 上那个被浏览了数千次的问题:"How do I SET the GOPATH environment variable on Ubuntu? What file must I edit?"。感同身受吗?欢迎加入俱乐部。
我自己也曾花了半天时间,试图弄明白为什么 Go 找不到我的包,尽管我“做对了所有步骤”。剧透:我其实做错了。在本文中,我们将分析 在 Ubuntu 上配置 GOPATH 时的常见错误,学习如何避免它们,并最终将环境配置得像瑞士手表一样精准运行。
什么是 GOPATH,为什么它仍然重要?
在深入细节之前,让我们回顾一下什么是 GOPATH。在 Go 的世界里(尤其是在 1.16 版本之前),它曾是 神圣不可侵犯的。GOPATH 是 Go 工作目录的路径,用于存放您的源代码、编译后的二进制文件以及第三方包。在 Ubuntu 上,它默认设置为 $HOME/go,但许多开发者(尤其是那些处理多个项目的人)会更改它。
随着 Go Modules 的出现(从 Go 1.11 开始),手动管理 GOPATH 的需求有所降低,但并未完全消失。如果您在处理旧项目、使用 go get,或者只是希望 go install 将二进制文件存放到一个方便的位置,您仍然需要与这个变量打交道。
在 Ubuntu 上配置 GOPATH 的 5 大错误
我收集了初学者(以及不仅仅是初学者)最常踩的坑。检查一下您是否正身处其中某个坑里。
错误 #1:编辑了错误的文件
这是 Stack Overflow 上最常见的问题。用户会去修改 /etc/environment、/etc/profile 甚至 /etc/bash.bashrc。是的,这能生效,但这是不好的做法。系统文件是为系统设置准备的。您的 GOPATH 是个人变量,应该放在用户配置文件中。
正确做法: 编辑 ~/.bashrc(针对 Bash)或 ~/.profile(如果您使用 login shell)。如果您使用 Zsh,则是 ~/.zshrc。
错误 #2:忘记使用 export
我经常在配置文件中看到:GOPATH=$HOME/go 而没有 export。没有 export,变量将不会传递给子进程(包括您的 IDE 和 go build)。
正确的语法:
export GOPATH=$HOME/goexport PATH=$PATH:$GOPATH/bin错误 #3:没有重新加载终端
您编辑了 .bashrc,保存了,然后盯着空白的 echo $GOPATH 发呆。在您应用更改之前,魔法不会发生。命令 source ~/.bashrc 是您最好的朋友。
错误 #4:与 Go Modules 冲突
如果您为每个项目都使用 go mod init,GOPATH 可能会造成干扰。特别是当您试图在 $GOPATH/src 目录内工作时。现代 Go 不再需要这样,但如果您坚持将项目放在 ~/go/src/myproject 中,请准备好迎接意外的错误。
错误 #5:路径中包含空格和特殊字符
Ubuntu 允许创建带空格的文件夹。但请不要为 Go 这样做。/home/user/My Projects/go 会带来无尽的麻烦。请使用 /home/user/projects/go 或直接使用 $HOME/go。
分步指南:如何正确配置 GOPATH
让我们一劳永逸地解决这个问题。打开终端,按顺序执行以下命令。
步骤 1. 检查当前 Go 版本
go version博客
书籍推荐
推荐阅读