go get超时本质是GOPROXY未生效,导致直连GitHub;需开启GO111MODULE=on,正确配置GOPROXY为https://goproxy.cn,direct等,并验证go env GOPROXY输出及go list -m命令是否快速返回。

go get 超时本质是 GOPROXY 没生效
直接执行 go get github.com/kataras/iris/v12@latest 卡住或报 dial tcp ...: i/o timeout,不是网络差,而是 Go 模块系统根本没走代理——它还在试图直连 GitHub 或 golang.org。关键判断点:看终端输出里有没有 go: downloading github.com/kataras/iris/v12 v12.2.4 这类行,没有就说明代理失效或未启用。
-
GO111MODULE=on必须开启,否则 go mod 逻辑不触发,代理形同虚设 - 代理地址必须用
https://goproxy.cn,direct或https://mirrors.aliyun.com/goproxy,https://proxy.golang.org,单写一个域名(如https://goproxy.cn)会导致 fallback 失败 - 执行
go env -w GOPROXY=...后,立刻运行go env GOPROXY确认输出一致,别信“设过了” - Windows 用户注意:PowerShell 和 CMD 的环境变量作用域不同,建议统一用 PowerShell 并重启终端
国内常用代理配置命令(复制即用)
以下命令在项目根目录外任意位置执行均可,但需确保终端是新开的(或已 source ~/.bashrc):
go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct
阿里云用户可换为:
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy,https://proxy.golang.org
验证是否生效:go env GOPROXY 应输出你刚设置的值;go list -m github.com/kataras/iris/v12@latest 应快速返回版本信息,而非卡住。
仍超时?检查三个隐藏拦路虎
即使代理配置正确,以下情况仍会触发超时或降级到 v11:
- 当前目录下已有旧
go.mod文件且 module 名不是小写纯字母(如含大写、下划线、空格),Go 会拒绝拉取 v12,静默 fallback 到 v11 ++incompatible - 执行
go get前没在模块根目录,go list -m返回command-line-arguments,说明模块上下文丢失 - 本地有残留
vendor/目录或旧go.sum,Go 会优先读取它们,绕过 GOPROXY。删掉再试:rm -rf vendor go.sum
为什么 go get github.com/kataras/iris 总是拉错版本
这个命令默认解析为 v0.0.0-xxx 或 v11,因为仓库主干已切到 v12,但 Go 的语义化版本规则不把 /v12 当路径后缀,而当模块标识符。漏掉 /v12 就等于告诉 Go:“我要老版本”。最稳妥写法只有两个:
-
go get github.com/kataras/iris/v12@latest(推荐) -
go get github.com/kataras/iris/v12@v12.2.4(指定已知稳定版,避免 latest 被误推)
别信文档里写的 “go get -u github.com/kataras/iris”,那是 v11 时代的遗毒,现在用必崩。











