应设GOPROXY=https://goproxy.cn,direct并配GOSUMDB=off(测试)或sum.golang.google.cn(生产),私有模块还需GOPRIVATE;404或checksum mismatch时先go clean -modcache。

go mod download卡在proxy.golang.org怎么办
不是网络差,是默认代理根本连不上。Go 1.13+ 默认用 https://proxy.golang.org,这个地址在国内基本不可达,DNS污染、TLS超时、连接重置天天见。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 立刻执行
go env -w GOPROXY=https://goproxy.cn,direct—— 注意逗号分隔,direct是 fallback 必选项,缺了私有模块或未镜像的 GitHub 仓库就拉不下来 - 别用分号、空格或等号拼接,Go 只认英文逗号;也别写成
https://goproxy.io,它已停服,实际返回 502 - 验证是否生效:
go env GOPROXY输出必须是完整字符串,不是off或空
GOPROXY设了还是报404或checksum mismatch
404 说明镜像没收录该模块,但没 fallback 到直连;checksum mismatch 则是校验失败,常见于镜像同步延迟、本地缓存污染或中间代理篡改哈希。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 先清缓存:
go clean -modcache,再重试 - 确认你用的镜像源支持透传官方 checksum(
goproxy.cn和mirrors.aliyun.com/goproxy/都支持,自建 proxy 若没配GOSUMDB=off或跳过校验,就会出问题) - 临时调试可关校验:
go env -w GOSUMDB=off,但上线前必须恢复,否则失去依赖完整性保护
公司内网拉不到私有模块
即使 GOPROXY 设了 direct,Go 仍会先去镜像站查一遍私有路径,查不到才直连——但直连时会校验 sum,而私有模块没发布到官方 checksum DB,直接报 checksum mismatch。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 必须配
GOPRIVATE,告诉 Go 哪些域名下的模块跳过代理和校验,例如:go env -w GOPRIVATE=git.example.com/internal/* - 若用内部 Nexus/JFrog 代理私有模块,可把私有代理加进
GOPROXY链式配置:go env -w GOPROXY=https://goproxy.cn,https://nexus.example.com,goproxy,direct -
GOPRIVATE的 glob 模式要精确匹配模块路径,漏掉/*或写错域名,私有模块照样走公共代理
Alpine镜像里exec format error或no such file or directory
这不是 Go 编译失败,是二进制和基础镜像 ABI 不兼容。Alpine 用 musl libc,而默认 go build 生成的是 glibc 依赖二进制,系统找不到 /lib64/ld-linux-x86-64.so.2 就报这类错。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 构建时必须设
CGO_ENABLED=0,强制纯 Go 静态链接,命令形如:CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o app . -
-ldflags '-s -w'只是去符号、减体积,不解决链接器问题;真正关键的是CGO_ENABLED开关 - 如果项目真要用 cgo(比如依赖 sqlite 或 openssl),就得在 Alpine 镜像里装
musl-dev,并保持CGO_ENABLED=1,否则 runtime 还是挂
direct 和 GOPRIVATE 必须同时生效,缺一不可;而 Alpine 兼容性问题,99% 的人只改 ldflags,却忘了 CGO_ENABLED=0 才是开关。


















