go mod init 初始化模块时模块名必须是合法导入路径;写错需手动修改go.mod或用go mod edit -module修正;本地引用未发布子模块用replace并及时清理;GO111MODULE=on虽默认启用,但目录无go.mod、路径含空格或go get无域名时会退回到GOPATH模式。

直接在项目根目录运行 go mod init 即可初始化模块,但模块名必须是合法的导入路径(如 github.com/username/project),不能只是本地文件名或空字符串。
go mod init 后模块名写错怎么办
模块名一旦写错,go.mod 文件里的 module 行就会影响所有后续导入和依赖解析。Go 不提供内置命令自动修正,只能手动编辑:
- 打开
go.mod,修改第一行module github.com/xxx/yyy为正确路径 - 运行
go mod edit -module github.com/correct/path(推荐,避免手误) - 执行
go mod tidy重新计算依赖,检查是否出现require ...: version "..." invalid类错误——这说明某些依赖仍按旧模块名解析,需同步更新代码中所有import语句
本地开发时如何引用未发布的子模块
当项目包含多个子模块(如 cmd/api、internal/pkg),又不想立即推送到远程仓库,用 replace 最稳妥:
go mod edit -replace github.com/yourname/project/internal/pkg=../internal/pkg
注意:
立即学习“go语言免费学习笔记(深入)”;
-
replace路径必须是绝对路径或相对于当前go.mod的相对路径 - 该指令只在本地生效,
go mod vendor或 CI 构建时不会包含被replace的内容 - 发布前务必删掉
replace行,否则他人go get会失败
GO111MODULE=on 是默认行为,但仍有例外
从 Go 1.16 开始,默认启用模块模式,但以下情况仍会退回到 GOPATH 模式:
- 当前目录不在任何
go.mod的子树中,且未显式设置GO111MODULE=on - 运行
go build时路径中含空格(某些旧版本 Windows 下触发 bug) - 执行
go get时目标包路径不带域名(如go get foo),会被当成 GOPATH 包处理
最稳做法:始终在项目根目录下操作,并确认 go env GO111MODULE 输出为 on。
模块名不是项目文件夹名,而是未来别人 import 你代码时写的路径;替换本地依赖要记得清理再发布;GO111MODULE 看似默认开启,但路径和命令写法稍有偏差就会静默掉回老模式。










