必须设go111module=on,否则后续配置无效;goproxy需设为https://goproxy.cn,direct;私有模块须配goprivate;gosumdb建议设为off以跳过远程校验。

GO111MODULE=on 是硬性前提
不设这个,后续所有配置都无效。Go 1.16+ 虽默认启用 Modules,但很多旧环境(CI 镜像、Docker 容器、未更新的 shell 配置)仍沿用 auto 模式。一旦当前目录不在 GOPATH/src 下且无 go.mod,go build 就会报 no required module provides package。
GO111MODULE=auto 依赖路径判断,不可靠——比如你在 /tmp/myapp 初始化项目,它可能直接拒绝识别为模块;GO111MODULE=off 则完全禁用模块功能,go mod 命令失效,go get 不写入 go.mod,go mod tidy 报错 not in a module。
执行以下命令全局固定:
go env -w GO111MODULE=on
GOSUMDB=off 禁用校验和检查
这是真正实现“不校验”的方式。默认 GOSUMDB=sum.golang.org,每次 go build 或 go get 都会联网验证 go.sum 中每个模块的哈希值是否匹配。若网络不通或私有模块未被 GOSUMDB 支持,就会卡住或报错 checksum mismatch。
设为 off 后,Go 完全跳过远程校验,只比对本地缓存与 go.sum 是否一致(即不校验来源,只校验本地完整性):
go env -w GOSUMDB=off
注意:GOSUMDB=off 不等于关闭校验——它仍会检查你本地下载的模块内容是否和 go.sum 记录一致,只是不连 sum.golang.org 校验签名。真正绕过所有校验需配合 go mod download + 手动删 go.sum,但强烈不建议。
GOPRIVATE 配置私有模块黑名单
GOPRIVATE 不是“黑名单”而是“免代理/免校验白名单”。它告诉 Go:这些域名下的模块,不要走 GOPROXY,也不要发给 GOSUMDB 校验。没配它,Go 会尝试用 GOPROXY 拉取私有地址(如 git.internal.company.com/lib/foo),结果是 404 或 401,然后报错 reading git.internal.company.com/lib/foo/go.mod: 401 Unauthorized。
Go 配置库,使用 spf13/viper — 分层优先级(flag > env >file > KV > default),提供 BindPFlag/BindPFlags、SetEnvPrefix + SetEnvKeyReplace 等功能。
设置方式(支持逗号分隔和通配符):
go env -w GOPRIVATE="git.internal.company.com,github.com/myorg"
或更宽松:
go env -w GOPRIVATE="*.internal.company.com"
关键点:
- 必须用实际域名,不能用别名(如
mylib.local) - 如果用了 SSH 地址(
git@git.internal.company.com:group/repo.git),需确保~/.gitconfig中有[url "git@git.internal.company.com:"] insteadOf = https://git.internal.company.com/,否则 Go 默认走 HTTPS 协议失败 -
GOPRIVATE和GOSUMDB=off是两件事:前者让私有模块跳过代理和远程校验,后者让所有模块跳过远程校验
为什么不能只靠 GOPROXY=direct?
GOPROXY=direct 表示不走任何代理,直接从源拉取——但它不解决认证和校验问题。私有仓库仍要凭据(~/.netrc 或 git credential),且仍会尝试连 sum.golang.org 校验哈希,失败后报错。
常见误操作:
- 只设
GOPROXY=direct就以为能拉私有库 → 实际仍卡在认证或校验环节 - 设了
GOPRIVATE却忘了配 Git 凭据 →go mod download报fatal: could not read Username - 在 CI 中设
GOSUMDB=off却没提交go.sum→ 构建时因本地无缓存而失败
真正稳定的组合是:GO111MODULE=on + GOPROXY=https://goproxy.cn,direct + GOPRIVATE=your-domain.com + GOSUMDB=off(仅限内网可信环境)。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










