Go环境配置核心是设GOPROXY代理(如go env -w GOPROXY=https://goproxy.cn,direct),否则go mod download必卡死;gopls需手动安装,模块名须小写连字符格式,且PATH与shell配置须匹配。

Go 环境现在基本不用手动配 GOPATH,装完就能写代码;但国内不设代理,go mod download 会卡死或报 timeout 错误——这是最常被跳过的一步,也是后续所有依赖问题的根源。
go version 能跑 ≠ 环境就 ready
很多用户执行 go version 成功后就以为万事大吉,结果一运行 go run main.go 就报错,或者 go get 失败。根本原因在于:Go 1.16+ 默认启用模块模式(GO111MODULE=on),但没配 GOPROXY 时,它会直连 proxy.golang.org 和 sum.golang.org,这两个域名在国内基本不可达。
- 必须显式设置代理,否则首次
go mod tidy可能卡住 5 分钟以上,最后失败 -
go env -w GOPROXY=https://goproxy.cn,direct是当前最稳定的选择(七牛云维护,兼容性好) - 顺带加上
go env -w GOSUMDB=sum.golang.google.cn,避免校验失败 - Windows 用户注意:CMD/PowerShell 必须重启才能读取新环境变量
VS Code 插件安装后提示“install tools”别全点
VS Code 安装官方 Go 插件后,首次打开 .go 文件会弹出 “Install All Tools” 提示。这个操作看似省事,实则容易失败——尤其在未设代理时,它会尝试下载 gopls、goimports、dlv 等十几个工具,其中部分工具托管在 golang.org/x/ 下,直连必超时。
- 建议关闭自动弹窗,在终端里手动装关键工具:
go install golang.org/x/tools/gopls@latest -
gopls是语言服务器核心,必须装;dlv(调试器)按需装:go install github.com/go-delve/delve/cmd/dlv@latest - 如果提示
cannot find module providing package,说明代理没生效,先检查go env GOPROXY - 装完后在 VS Code 设置里确认
"go.useLanguageServer": true
go mod init 的路径不是随便写的
go mod init 后面跟的模块名,不是项目文件夹名,也不是本地路径,而是将来要发布的导入路径(import path)。写错会导致后续 go get 引入时解析失败、IDE 提示找不到包、CI 构建失败。
Go 配置库,使用 spf13/viper — 分层优先级(flag > env >file > KV > default),提供 BindPFlag/BindPFlags、SetEnvPrefix + SetEnvKeyReplace 等功能。
立即学习“go语言免费学习笔记(深入)”;
- 本地练习可写
go mod init example/hello,但不要用go mod init ./hello或go mod init hello - 若计划推送到 GitHub,应直接写真实地址:
go mod init github.com/yourname/mycli - 模块名中不能含大写字母(
MyProject❌)、空格、下划线(my_project❌),推荐全小写 + 连字符(my-cli✅) - 一旦
go.mod生成,再改模块名需同步更新所有import语句,代价高
Mac M 系列和 Linux 用户注意 PATH 冲突
Mac(尤其是 M1/M2/M3)和多数 Linux 发行版默认用 zsh,但部分用户残留 bash 配置,或同时存在 ~/.zshrc 和 ~/.zprofile,导致 go 命令可用,但 go install 生成的二进制无法被识别。
- 查清当前 shell:
echo $SHELL,再确认配置文件是否匹配(zsh看~/.zshrc,bash看~/.bashrc) -
go install默认把可执行文件放到$GOPATH/bin,必须确保该路径在PATH中,且排在系统/usr/bin之前(否则可能调到旧版本) - 验证方式:
which dlv应返回类似/Users/xxx/go/bin/dlv,而非/usr/local/bin/dlv - 若用 Homebrew 安装过 Go,务必卸载:
brew uninstall go,避免brew版本与官方 pkg 冲突
真正卡住人的从来不是“怎么装”,而是“装完之后为什么某些命令不认、某些包拉不下来、某些 IDE 功能不亮”。代理、模块名、shell 配置这三处,覆盖了 90% 的实际阻塞点,改完立刻见效。

















