根本原因是默认代理proxy.golang.org在国内不可用,必须设置goproxy=https://goproxy.cn,direct并确保环境变量被子进程继承,否则仍会fallback至默认代理导致超时。

go mod download卡在proxy.golang.org怎么办
根本不是网速问题,而是Go默认去连proxy.golang.org,国内直连大概率超时或DNS污染。你看到的“卡住”,其实是工具链反复重试+退避,几秒不动后报dial tcp: i/o timeout。
必须设GOPROXY环境变量(不是只改go env -w),推荐值:https://goproxy.cn,direct。逗号后的direct不能省——它让git.example.com/internal这类私有路径自动跳过代理、直连拉取。
- 别信“改完
go env -w GOPROXY=...就完事”,新Shell进程若没继承该变量,go命令仍读空值 - 验证是否生效:跑
go mod download -x github.com/gin-gonic/gin@v1.9.1,看日志里是不是GET https://goproxy.cn/...,不是就说明没生效 - 如果公司用Nexus或Artifactory做私有代理,把它的地址放最前:
http://nexus.example.com/repository/goproxy/,https://goproxy.cn,direct
为什么设置了GOPROXY还慢或404
goproxy.cn是镜像服务,不是加速器——它的速度取决于你机器到七牛节点的网络质量,并非所有地区都快。刚发布的模块(比如v1.2.3)可能1–2分钟内缓存未刷新,导致404 Not Found。
遇到404可临时切到https://goproxy.io(注意:已停服,仅作临时fallback;若返回502则立刻换回goproxy.cn)。
初始化并管理阿里云SDK Go 客户端,涵盖 sync.Once 单例、goroutine 安全、endpoint 与 region 配置、VPC 端点及调试。
- 不支持私有模块鉴权:如果你
replace了SSH路径或带Basic Auth的HTTP地址,goproxy.cn无法帮你登录,全靠directfallback - 它不处理
go get -insecure,也不支持http://源(Go 1.13+默认禁用) - 某些自建Proxy若没透传
sum.golang.org校验,会引发checksum mismatch,此时清缓存go clean -modcache再重试
本地开发时怎么避免每次改代码都重下依赖
Go本身会复用$GOPATH/pkg/mod里的本地缓存,但前提是go.mod没变、模块版本没动。真正拖慢开发节奏的,常是VSCode插件或CI脚本盲目执行go mod tidy或go get。
- 关掉VSCode的
go.toolsManagement.autoUpdate,手动装好gopls:go install golang.org/x/tools/gopls@latest - 开发中少用
go run main.go——它每次编译+链接+执行,耗时300–800ms;换成go build -o myapp && ./myapp,二进制可复用 - 确保
GO111MODULE=on已设(go env -w GO111MODULE=on),否则首次go mod init可能卡在“verifying”十几秒 -
.dockerignore里排除node_modules/、vendor/、.git等无关目录,避免Docker构建时误触go mod download
多项目共用依赖缓存但又不想互相污染
Go的模块缓存是全局的($GOPATH/pkg/mod),多个项目共享同一份下载结果,这是优势也是隐患——某项目go mod tidy删掉一个依赖,其他项目若还引用它,下次go build可能失败。
解决方案不是隔离缓存路径(那会失去复用价值),而是控制“谁有权改缓存”。核心是统一管理go.mod生命周期:
- 团队约定:只有CI流水线执行
go mod tidy并提交变更,开发者本地只go get指定版本,不主动tidy - CI中加检查:
git status --porcelain go.mod go.sum非空则拒绝合并,防意外修改 - 若真要隔离,可用
go clean -modcache清空后重新go mod download,但代价是重拉全部依赖,仅限调试用
真正容易被忽略的是:GOPRIVATE没配对私有模块路径,会导致Go仍尝试走公共代理查git.company.com/internal,然后静默fallback失败——必须显式设export GOPRIVATE=git.company.com/internal/*。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










