goland 中设置 goproxy 仅作用于 ide 内置 terminal,run/debug、ci、外部终端等均不生效;必须用 go env -w 全局配置 goproxy、gonoproxy、gonosumdb 三者,并确保格式严格正确(如 direct 小写、末尾、带斜杠等)才能真正生效。

GoLand 里填了 GOPROXY 不等于代理就生效了,它只影响 IDE 底部 Terminal 启动的子 shell,不作用于 Run/Debug 按钮、外部终端、CI 流水线,更不会覆盖系统级环境变量。真正起效必须用 go env -w 全局写入,且要配齐 GOPROXY、GONOPROXY、GONOSUMDB 三者。
GoLand 界面设置只管终端,不管运行和构建
Settings → Go → Go Modules → Environment 里填的 GOPROXY=https://goproxy.cn,direct,仅对 IDE 自带 Terminal 中手动敲的 go mod download 有效。点 ▶️ 运行 main 函数时,默认不读这个字段,除非你勾选 “Include system environment variables”。如果你用 WSL 或远程开发容器,IDE 终端和宿主机完全隔离,这个设置在容器里根本不存在。
- 验证方式:在 GoLand Terminal 执行
go env GOPROXY,输出是你填的值;再新开一个系统终端(如 iTerm / PowerShell),执行同样命令,大概率是空或https://proxy.golang.org,direct - Run/Debug 配置默认不继承 IDE 环境变量,必须手动在 Edit Configurations → Environment variables 里补上
GOPROXY和其他变量 - CI 构建、脚本调用
go build时,完全不看 GoLand 设置,只认go env或 shellexport
GOPROXY 必须含 direct 且放在末尾
只写 https://goproxy.cn 是高风险配置:CDN 缓存未命中、上游同步延迟、证书更新都可能返回 404,而 Go 遇到 404 不会 fallback 到下一个地址,直接失败。只有连接超时(dial tcp: i/o timeout)或拒绝(connection refused)才会轮到下一个代理。
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
- 正确写法:
https://mirrors.tuna.tsinghua.edu.cn/goproxy/,https://goproxy.cn,direct(逗号前后不能有空格) -
direct必须小写、无协议、无路径、严格置于末尾——它是兜底行为,表示对匹配GONOPROXY的域名直连 - 清华源必须带结尾斜杠:
https://mirrors.tuna.tsinghua.edu.cn/goproxy/,少斜杠会 404 - 企业内网 CI 环境建议去掉
direct,防火墙常拦截直连出向请求,留着反而导致构建失败
私有模块拉不到?GONOPROXY 和 GONOSUMDB 必须成对精确配置
GoLand 界面里没有地方填 GONOPROXY 或 GONOSUMDB,它们只能通过 go env -w 设置。如果只设 GOPROXY,私有模块(如 git.internal.company.com/lib)会被转发给代理,结果不是 403 就是 unknown revision 或 checksum mismatch。
- 执行:
go env -w GONOPROXY="git.internal.company.com,github.com/my-org" - 必须同步执行:
go env -w GONOSUMDB="git.internal.company.com,github.com/my-org",两个值必须完全一致(多空格、少域名都不行) - 通配符不支持路径前缀,
git.internal.company.com/internal/*无效,得写全git.internal.company.com/internal/pkg - 若私有仓库走 HTTPS 且需认证,还需配
git config --global url."https://token:x-oauth-basic@git.internal.company.com/".insteadOf "https://git.internal.company.com/"
验证是否真生效,别信 go env 输出
go env GOPROXY 显示正确 ≠ 实际请求走对了代理。Go 工具链启动子进程时可能没继承变量,尤其在 IDE 或 CI 场景下。
- 最可靠验证:运行
go mod download -x github.com/gin-gonic/gin@v1.9.1,看日志第一行是不是GET https://goproxy.cn/... - 如果看到
GET https://proxy.golang.org/...,说明没生效,回去检查go env -w是否执行、是否被其他配置覆盖 - 私有模块验证:用
go mod download -x git.internal.company.com/lib@v0.1.0,应看到GET https://git.internal.company.com/...(直连),而不是发给goproxy.cn - 校验
GOSUMDB:下载后执行go mod verify,若报checksum mismatch,大概率是GONOSUMDB没配或和GONOPROXY不一致
最容易被忽略的是:多个环境变量之间必须严格对齐,GONOPROXY 和 GONOSUMDB 值必须一字不差,且 direct 在 GOPROXY 中的位置和大小写不能错——错一个字符,整个代理链就断在某个环节,现象却是“有时能下、有时卡住”,排查起来极耗时间。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










