go module 是新建项目第一行命令就必须启用的基础设施,需正确设置代理、执行 go mod init(带完整模块路径)、用 go get @ 指定版本、通过 go mod tidy 删除依赖、保留 go.sum、强制 go111module=on,并确保操作在正确目录下进行。

go get 报错或 go build 找不到包上。
go mod init 必须带模块路径,不能只写项目名
很多初学者执行 go mod init myproject,结果 go.mod 里生成的是 module myproject —— 这会导致后续所有 import 路径无法被正确解析,尤其当你引用自己写的子包时,编译直接失败。
- 模块路径应尽量匹配未来代码托管地址,比如 GitHub 仓库是
github.com/yourname/app,就该用go mod init github.com/yourname/app - 本地开发没建仓库?用占位域名也行:
go mod init example.com/app,只要全项目 import 语句和它一致即可 - 路径里不能有空格、中文、下划线开头;推荐全小写 + 连字符(如
my-cli-tool)
go get 不等于“安装”,它会改写 go.mod 并触发依赖计算
go get 命令不是 npm install 或 pip install,它本质是“声明依赖 + 触发最小版本选择(MVS)”。直接敲 go get github.com/gin-gonic/gin 很可能拉来 v1.9.0,但如果你的其他依赖锁定了 golang.org/x/net v0.14.0,而 gin v1.9.0 要求 v0.17.0,Go 就会升级整个树——你没动代码,却可能因间接依赖变更导致运行时 panic。
初始化并管理阿里云SDK Go 客户端,涵盖 sync.Once 单例、goroutine 安全、endpoint 与 region 配置、VPC 端点及调试。
- 要精确控制版本,必须带 @:例如
go get github.com/gin-gonic/gin@v1.8.2 - 想降级?同样用 @ 指定旧版,Go 会自动处理冲突并更新
go.sum - 删依赖不能靠手动删
require行,必须删 import 语句后跑go mod tidy,否则残留的 require 会干扰下次 tidy
go.sum 不是日志文件,删了会导致校验失败
初学者常把 go.sum 当成可删的缓存文件。实际上它是每个依赖模块的 checksum 清单,go build 和 go run 都会校验。删掉后首次构建会重新下载并生成,但如果网络中断、代理失效或模块源已删,就会卡在 verifying github.com/xxx@v1.x.y: checksum mismatch。
- 遇到校验失败,先确认 GOPROXY 是否生效:
go env GOPROXY,国内推荐设为https://goproxy.cn,direct - 不要手动编辑
go.sum;若确定远程模块内容无害且需跳过校验(仅限离线调试),可用go env -w GOSUMDB=off,但上线前务必关掉 -
go mod verify可单独校验全部依赖,适合 CI 流程中加入检查环节
GO111MODULE=on 是唯一安全选项,别信 auto
GO111MODULE=auto(默认值)的行为是:如果当前目录不在 $GOPATH/src 下,且目录里有 go.mod,才启用 Module。这意味着你在 $GOPATH/src 里新建项目,哪怕写了 go.mod,Go 仍走 GOPATH 模式——依赖不会写入 go.mod,go get 会静默失败,错误信息还极隐蔽。
- 永久启用:执行
go env -w GO111MODULE=on - 验证是否生效:
go env GO111MODULE输出必须是on - 一旦设为
on,GOPATH 完全失效,所有项目都走 Module,彻底告别路径绑架
go get、或用 IDE 启动时 pwd 不对,都会让 go.mod 更新错位置,甚至生成多个冗余模块。操作前先 pwd 确认,比反复重试更省时间。golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










