GO111MODULE开启状态下Go包如何引用其他未放入GOPATH的独立mod包
问题核心原因
你当前的报错是因为Go的模块寻址规则默认只会从GOROOT、GOPATH、已配置的本地依赖路径/远程仓库查找包,你仅单独为Library2初始化了模块,没有为Library1配置Library2的本地寻址规则,因此构建时无法识别本地的Library2包。
推荐配置方案(适用于Go 1.18及以上版本,无需修改mod文件)
- 第一步:回到
HelperFolder根目录,执行工作区初始化命令:go work init ./Library1 ./Library2
执行后会在根目录生成go.work文件,自动将两个本地目录加入Go的工作区,构建时会优先从工作区查找依赖,无需将包上传到远程仓库。 - 第二步:进入Library1目录,为Library1初始化独立模块:
go mod init 自定义模块名
自定义模块名仅需符合Go模块命名规范即可,不需要对应真实的远程仓库地址。 - 第三步:检查Library2的模块名(即Library2目录下
go.mod文件第一行module后面的内容),在Library1的lib1.go中使用该模块名导入依赖,示例:
假设Library2的模块名为my/library2,则导入语句为import "my/library2",不要使用相对路径导入。 - 第四步:在Library1目录下执行
go mod tidy同步依赖,之后执行go build即可正常构建。
兼容旧版本Go的配置方案(Go 1.18以下版本可用)
- 先按照上述方案的第二步、第三步完成Library1模块初始化和导入语句编写
- 在Library1的
go.mod文件末尾添加本地依赖映射规则:replace Library2的模块名 => ../Library2 - 在Library1目录下执行
go mod tidy同步依赖后,即可正常构建。
内容的提问来源于stack exchange,提问作者MoB
相关产品推荐
相关产品推荐

