go mod download卡住或超时主因是GOPROXY未正确配置,须设为https://goproxy.cn,direct或清华源+七牛源+direct组合,并配GOPRIVATE处理私有模块、GOSUMDB=off临时调试校验问题。

go mod download卡住或超时,大概率是GOPROXY没设对
Go 1.13+ 默认启用模块代理,但默认值 https://proxy.golang.org,direct 在国内基本不可用。终端卡在“Fetching”或报 dial tcp 142.251.42.241:443: connectex: A connection attempt failed,基本就是这个原因。
- 立即执行:
go env -w GOPROXY=https://goproxy.cn,direct - 更稳妥的多源 fallback(推荐):
go env -w GOPROXY="https://mirrors.tuna.tsinghua.edu.cn/go/modules/,https://goproxy.cn,direct" - 验证是否生效:
go env GOPROXY输出应是你刚设置的值,不是空或默认地址 - IDE(如 Goland/VSCode)可能读取独立环境变量——务必在 IDE 内置终端里也运行一遍
go env -w GOPROXY=...,或检查其 Go 设置页是否覆盖了该变量
私有仓库返回403或module lookup failed,必须配GOPRIVATE
一旦 GOPROXY 指向公共镜像,所有模块(包括 git.company.com 或 github.com/my-org/private-repo)都会被转发过去,结果不是权限问题,而是路由错位。
- 把私有域名加进
GOPRIVATE,让 Go 自动跳过代理直连:go env -w GOPRIVATE="git.company.com,github.com/my-org/*" - 支持通配符
*,不支持正则;多个域名用英文逗号分隔,**不能有空格** - 若用 SSH 克隆,需确保
ssh -T git@git.company.com能通;若用 HTTPS,提前配置 Git 凭据或设GIT_TERMINAL_PROMPT=0避免卡住
checksum mismatch 或 zip: not a valid zip file,缓存污染或 GOSUMDB 不可达
这类错误常被误判为网络问题,实际多因本地缓存损坏或校验服务器不可达导致“假失败”。sum.golang.org 在国内通常无法访问,GOSUMDB 校验环节就会卡死。
- 先清理模块缓存:
go clean -modcache(会清空所有已下载模块,后续首次go mod download略慢) - 临时关闭校验验证是否为此原因:
go env -w GOSUMDB=off(仅调试用,切勿长期开启或提交) - 遇到
zip: not a valid zip file,说明某模块缓存损坏,可直接删掉对应路径,例如报错含github.com/some/pkg,就删$GOMODCACHE/github.com/some/pkg@v1.x.x
go run 或 go mod tidy 报 cannot find module,GOROOT 或 GOPROXY 没闭环
go version 成功 ≠ 环境真正可用。常见于系统自带旧版 Go(如 Ubuntu 的 golang-go 包)和手动安装新版混用,或 GOPROXY 未设却误以为“能跑命令就行”。
- 确认
which go输出是/usr/local/go/bin/go,不是/usr/bin/go;否则PATH中$GOROOT/bin必须放在开头 - 显式设
GOROOT=/usr/local/go并写入 shell 配置(~/.bashrc或~/.zshrc),然后source生效 -
go env -w GOPROXY=...是必须步骤,不是可选项;没它,go mod tidy就是裸奔状态
GOPRIVATE 域名漏写通配符、以及 GOSUMDB=off 被误留到生产构建流程里。


















