Go模块路径必须使用正斜杠/且为域名风格的唯一标识符,禁止反斜杠、相对路径、IP或localhost,子模块需显式定义go.mod,版本号须置于路径末尾并严格匹配大小写。

Go模块路径里斜杠必须是正斜杠,不能用反斜杠
Windows系统下容易手误写成 \,但Go工具链只认/,哪怕在go.mod或import语句里混入一个\,go build会直接报错:invalid module path或import path must be absolute。
- 所有模块路径(包括
module声明、import语句、replace指令)统一用/ - Windows用户别依赖IDE自动补全——有些编辑器在路径补全时可能塞进
\,尤其从文件系统拖入路径时 -
go mod edit -replace命令里也得手动检查斜杠方向,它不会帮你纠正
模块路径不是文件路径,不能含..或开头的.
常见错误是把本地相对路径当模块名用,比如写import "./utils"或module ../myproj。Go模块路径是逻辑标识符,必须是全局唯一、可解析的域名风格字符串(如github.com/user/repo),和磁盘结构无关。
-
go mod init时传入的参数就是模块路径,不是当前目录名——别直接敲go mod init .,它会生成module .,这是非法的 - 本地开发想引用未发布模块?用
replace重定向,而不是改import路径本身 - 路径中出现
..会导致go list失败,且go get完全无法识别
子模块路径必须严格匹配go.mod里的module前缀
比如根模块定义为module github.com/user/api,那子目录auth/下的代码若要被外部导入,必须写import "github.com/user/api/auth",而不是"github.com/user/api/auth/v2"——除非你在auth/v2/go.mod里明确定义了新模块。
- Go不支持“隐式子模块”:同一仓库内不同目录不能靠路径自动成为独立模块,每个
go.mod文件定义一个独立模块 - 版本号(如
/v2)必须出现在模块路径末尾,且对应实际存在的go.mod文件,否则go get会找不到 - 跨模块引用时,路径大小写必须完全一致——
github.com/User/Repo和github.com/user/repo在Go眼里是两个不同模块
私有模块路径也要遵守域名规则,别用localhost或IP直连
很多人想快速搭私有模块,就写module 192.168.1.100/mylib或module localhost/mylib,结果go get失败,报no matching versions或unknown revision。
立即学习“go语言免费学习笔记(深入)”;
- Go要求模块路径以合法域名开头(可带端口,如
git.internal.company:8080/mylib),纯IP或localhost不被信任 - 如果没域名,用占位域名如
example.com/mylib,再配合GOPRIVATE环境变量跳过校验 -
go env -w GOPRIVATE=*.internal,example.com必须覆盖完整路径前缀,漏掉*或写错层级都会触发代理/校验证失败
/、大小写偏差,都可能导致下游构建无声失败。最稳妥的做法是:初始化时就用完整域名+小写路径,全程用go list -m确认解析结果,别信IDE的“看起来能跑”。










