GoLand的Proxy设置仅影响IDE内部功能,不改变终端中go命令行为;终端代理由环境变量GOPROXY控制,需用go env -w或shell配置设置,且多源须用|分隔、direct必须小写并置于末尾;私有模块需配合GOPRIVATE和GO111MODULE=on才生效。

GoLand里填的Proxy设置只影响IDE内部功能
Settings → Go → Go Modules 页面里的 Proxy 输入框,只是给 GoLand 自己用的:比如代码补全、依赖分析、跳转定义。它**不会改变你 Terminal 里执行 go get 或 go mod tidy 的行为**。
你在里面填了 https://goproxy.cn,不代表终端里 go env GOPROXY 就会输出这个值。验证方式很简单:go env GOPROXY 输出为空?那 Terminal 里所有模块操作都按默认逻辑走——大概率失败。
- 真正控制命令行行为的是系统级环境变量
GOPROXY,必须用go env -w GOPROXY=...或 shell 配置文件(如~/.zshrc)设置 - GoLand 的 Terminal 默认继承 shell 环境,所以只要 shell 里
GOPROXY设对了,终端命令自然生效 - 如果 Terminal 里
go env GOPROXY仍为空,检查是否漏了source ~/.zshrc,或 GoLand 的Settings > Tools > Terminal > Shell path是否指向了带登录态的 shell(例如/bin/zsh --login)
多个代理地址必须用 | 分隔,不是逗号
Go 1.13+ 要求多源 fallback 必须用竖线 | 连接,写成逗号会直接解析失败。例如:
export GOPROXY="https://goproxy.cn|https://proxy.golang.org|direct"
如果写成 https://goproxy.cn,https://proxy.golang.org,direct,Go 会尝试请求一个叫 https://goproxy.cn,https://proxy.golang.org,direct 的非法 URL,报错 invalid proxy URL。
-
direct是保留字,不是 URL,不能加协议、不能有空格、必须小写、必须放末尾 - 顺序决定 fallback 行为:Go 从左到右发起请求,遇到第一个返回 HTTP 2xx 或 404 的代理就停;5xx 或超时才继续下一个
- 国内镜像建议放最前(如
https://goproxy.cn),官方源兜底,direct收尾保私有模块
GOPRIVATE 才是绕过代理的关键,不是 Proxy 设置本身
GoLand 界面里没有地方填 GOPRIVATE,但它才是让某些包“不走代理”的唯一机制。比如公司内网模块 git.internal.company.com/mylib,只设 GOPROXY 没用——Go 仍会把它发给代理,结果是 403 或 timeout。
正确做法是单独设置:
go env -w GOPRIVATE="git.internal.company.com,github.com/myorg/*"
-
GOPRIVATE值是逗号分隔的域名/路径前缀列表,支持*通配符,但不支持正则 - 必须配合
GOPROXY末尾带direct才能生效;否则即使写了GOPRIVATE,Go 也不会直连 - 验证是否生效:运行
go get git.internal.company.com/mylib,观察是否跳过代理、直接发起 git clone
私有模块拉不到?先确认 GO111MODULE=on 和 go.mod 存在
GOPROXY 和 GOPRIVATE 只在 Go Modules 模式下起作用。如果项目还在 $GOPATH 下、没 go.mod、或 GO111MODULE 是 auto 或 off,这些配置全部被忽略。
- 执行
go env GO111MODULE,输出必须是on;如果不是,运行go env -w GO111MODULE=on - 新项目务必在空目录下先执行
go mod init example.com/foo,生成go.mod - 已有项目没
go.mod?别手动创建空文件,用go mod init初始化,否则版本解析可能错乱 - GoLand 的
Enable Go modules integration只影响 IDE 内部,不改变命令行模式
GOPRIVATE 和 GO111MODULE=on 这两个点。很多人填完 GOPROXY 就以为万事大吉,结果私有模块还是拉不下来、或者 go mod tidy 在 Terminal 里完全不认设置——问题往往不出在代理地址本身。


















