go111module=on是硬性前提,必须执行go env -w go111module=on并验证输出为on;goproxy须设为https://goproxy.cn,direct以支持私有模块跳过代理;go mod init后必须立即运行go mod tidy补全依赖,否则build会因缺失间接依赖失败。

GO111MODULE=on 是硬性前提,不是可选项
没开这个,go mod 命令根本不会生效,go mod init 生成的 go.mod 会被忽略,后续所有依赖操作都失效。常见现象是 go run main.go 能跑,但 go mod tidy 没反应、不下载包、go list -m all 报 “no modules found”。
必须执行:go env -w GO111MODULE=on,然后验证:go env GO111MODULE 输出应为 on。别信“新版默认开启”——CI 镜像、Docker 容器、旧 shell 配置里仍可能是 auto,而 auto 在 /tmp 或非 GOPATH 路径下会直接拒绝识别模块。
GOPROXY 必须配国内镜像加 direct
不设 GOPROXY,go get 和 go mod tidy 几乎必卡在超时或 403,尤其在国内网络环境下。https://proxy.golang.org 直连基本不可用。
推荐配置:go env -w GOPROXY=https://goproxy.cn,direct
-
https://goproxy.cn:七牛云维护,稳定、响应快 -
,direct:关键后缀,表示对私有域名(如git.internal.company.com)跳过代理,直接拉取;缺了它,私有模块会 401 或 404
验证:go env GOPROXY 输出必须严格匹配该字符串,不能多空格、少逗号、漏 direct。
Go 配置库,使用 spf13/viper — 分层优先级(flag > env >file > KV > default),提供 BindPFlag/BindPFlags、SetEnvPrefix + SetEnvKeyReplace 等功能。
go mod init 后必须立刻 go mod tidy
go mod init 只建空 go.mod,不解析 import、不下载依赖、不写 go.sum。此时直接 go build 很可能因间接依赖缺失而失败。
实操要点:
- 确保代码里真实存在未注释的
import "github.com/xxx/yyy"(不是字符串、不是注释掉的) - 在项目根目录(即含
go.mod的目录)运行go mod tidy - 若无反应,加
-v参数看卡点:go mod tidy -v - 别手动编辑
go.mod添加require行——go mod tidy会把它删掉
测试文件命名与路径错一个字符就找不到
go test 对文件名和函数签名极其敏感,不是“差不多就行”:
- 测试文件必须以
_test.go结尾(如http_test.go),且与被测代码在同一目录、同一包 - 测试函数必须是
func TestXxx(t *testing.T)形式,首字母大写,参数类型精确为*testing.T -
go test默认不递归扫描子目录;要测整个项目,用go test ./...或go test ./ - 如果
go test -v什么都没输出,八成是文件名或函数签名不合规,不是逻辑问题
VS Code 里 gopls 报 “failed to load packages”,往往不是插件问题,而是 go.mod 没 tidy 完、依赖没拉全,先在终端跑通 go list -m all 再重启语言服务器。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










