必须显式配置GOPROXY,推荐export GOPROXY=https://goproxy.cn,direct,其中direct确保私有模块直连;多镜像用英文逗号分隔可fallback,验证需go env GOPROXY和go list -m测试响应。

设置 GOPROXY 是必须做的第一步
国内直接访问 proxy.golang.org 几乎必然失败,表现为 go get 卡住、超时或返回 403。不设代理就等于默认走不通的路。
必须显式配置,且推荐用这个值:
export GOPROXY=https://goproxy.cn,direct
direct 不是可选项,而是关键:它让私有模块(比如 gitlab.internal.company/mylib)绕过代理直连,避免因认证或内网 DNS 导致拉取失败。
多个镜像用英文逗号分隔可 fallback,例如:
立即学习“go语言免费学习笔记(深入)”;
export GOPROXY=https://goproxy.cn,https://goproxy.io,direct
验证是否生效,运行:
go env GOPROXY
输出中应含 goproxy.cn;再试:
go list -m github.com/go-sql-driver/mysql
毫秒级响应即说明代理链通了。
遇到 checksum mismatch 别急着关校验
现象是 verifying github.com/xxx@vX.Y.Z: checksum mismatch,常见于镜像同步延迟或本地缓存污染,不是网络问题本身。
不建议全局禁用校验(如设 GOINSECURE),容易埋安全漏洞。优先尝试以下两个动作:
- 临时绕过当前命令:
go get -insecure github.com/xxx/yyy - 清空模块缓存再重试:
go clean -modcache,然后重新go get
注意:replace 指向本地路径后,若忘记删 // indirect 标记,也会触发校验异常——这是个容易被忽略的配置残留点。
go install 装 CLI 工具时必须带版本号
很多工具(swag、mockgen、gofmt)在 @latest 下可能指向未发布分支,导致功能缺失或 panic。
正确做法分两步:
- 查可用版本:
go list -m -versions github.com/swaggo/swag - 安装指定版本:
go install github.com/swaggo/swag/cmd/swag@v1.8.10
如果版本号含破折号(如 v2.0.0-alpha),必须用双引号包裹:go install "github.com/xxx/yyy@v2.0.0-alpha"。
装完别忘了确认 GOBIN 在 $PATH 中,否则执行时报 command not found。
离线或 CI 场景下提前缓存依赖
没有外网权限的环境(如金融内网、Air-Gapped CI)不能依赖实时拉取。必须提前把模块下载到本地或私有代理中。
最轻量方案是预下载:
go mod download
该命令会按 go.mod 把所有依赖(含 transitive)下载进 $GOPATH/pkg/mod,后续 go build 可完全离线。
若需共享给多台机器,可打包整个 pkg/mod 目录,或搭一个私有 GOPROXY(如 athens),用 go mod download -json 做增量同步。
真正难处理的是那些没打 tag、只在 branch 上维护的私有模块——它们无法被 go mod download 自动识别,得靠 replace + git clone --depth=1 手动补全。


















