go111module必须设为on,否则go mod命令失效、依赖无法管理,项目fallback至不可靠的gopath模式;auto模式路径判断不可靠,off模式彻底禁用模块功能。

Go Modules 必须显式启用,否则 go mod 命令无效、依赖无法管理,项目会 fallback 到不可靠的 GOPATH 模式。
GO111MODULE=on 是硬性前提
哪怕你用的是 Go 1.16+(默认强制启用 Modules),旧终端、CI 镜像或未刷新的 shell 仍可能卡在 auto 或 off 模式。一旦触发,常见报错是:no required module provides package 或 go: modules disabled by GO111MODULE=off。
-
GO111MODULE=auto依赖路径判断:比如你在/tmp/myapp下执行go mod init,它可能直接拒绝识别为模块 -
GO111MODULE=off彻底禁用 Modules:go get不写go.mod,go mod tidy报错not in a module - 执行
go env -w GO111MODULE=on是最稳妥的全局设定,一劳永逸
GOPROXY 必须设国内镜像
默认代理 https://proxy.golang.org 在国内基本不可用,go get 或 go mod tidy 常卡在 dial tcp: i/o timeout,导致流程中断。
- 推荐配置:
go env -w GOPROXY=https://goproxy.cn,direct -
,direct很关键:对私有域名(如git.internal.company.com)跳过代理,避免 401/404 - 验证是否生效:
go env GOPROXY应输出对应地址,不是空或默认值
go mod init 后必须立刻 go mod tidy
go mod init 只生成空的 go.mod,不下载任何依赖,也不校验 import 一致性。此时直接 go build 极大概率失败。
-
go mod tidy扫描全部import,补全直接/间接依赖,并同步更新go.sum - 别手动编辑
go.mod添加require行——go mod tidy会把它删掉 - 已有
vendor目录时,go mod tidy默认忽略冗余内容;需加-v参数才清理:go mod tidy -v
私有模块必须配 GOPRIVATE
没配 GOPRIVATE 时,Go 会尝试用 GOPROXY 拉取私有仓库(如 git.internal.company.com/lib/foo),结果不是 404 就是 401,报错:reading git.internal.company.com/lib/foo/go.mod: 401 Unauthorized。
- 设置方式:
go env -w GOPRIVATE="git.internal.company.com,github.com/myorg" - 支持通配符:
go env -w GOPRIVATE="*.company.com" - 如果私有仓库走 SSH(如
git@git.internal.company.com:lib/foo.git),还需配置 Git URL 重写:git config --global url."git@git.internal.company.com:".insteadOf "https://git.internal.company.com/"
真正容易被忽略的不是命令怎么敲,而是环境变量的生效范围和作用时机——go env -w 写入的是用户级配置,但某些 CI 环境或 Docker 容器里 shell 并不加载它,得在构建脚本开头显式 export;GOPRIVATE 和 GOPROXY 必须同时生效,缺一不可。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











