如何在另一个Go仓库中导入多工作区项目的子模块作为依赖?
解决Go多工作区子模块被外部项目导入的问题
问题原因
编译报错的核心是外部项目无法定位到github.com/zhaoyi0113/test-go-module/apps/logger对应的模块,主要源于两点:
- apps子模块的
go.mod定义的module路径与代码中的导入路径不匹配 - 该子模块未正确发布到远程仓库(或本地未做路径映射)
解决步骤
1. 修正apps子模块的配置
首先打开apps/go.mod,确保module路径与导入路径完全匹配:
module github.com/zhaoyi0113/test-go-module/apps go 1.18
同时修正根目录go.work中的版本笔误(将1.180改为1.18):
go 1.18 use ( ./apps )
2. 发布apps子模块到远程仓库
将apps模块的代码推送到GitHub对应仓库,并为子模块打版本标签:
# 进入apps子模块目录 cd apps # 提交并推送代码 git add . git commit -m "add logger package" git push origin main # 为子模块打版本标签(格式为子模块路径/版本号) git tag apps/v0.0.3 git push origin apps/v0.0.3
3. 在外部项目中拉取依赖
回到外部项目,执行命令拉取apps模块:
go get github.com/zhaoyi0113/test-go-module/apps@v0.0.3
执行后外部项目的go.mod会自动添加对应依赖:
module xxxx go 1.18 require ( github.com/zhaoyi0113/test-go-module/apps v0.0.3 )
本地开发场景(无需远程发布)
如果仅做本地测试,可在外部项目的go.mod中添加replace指令直接映射本地路径:
module xxxx go 1.18 require ( github.com/zhaoyi0113/test-go-module/apps v0.0.3 ) replace github.com/zhaoyi0113/test-go-module/apps => /本地多工作区项目的绝对路径/apps
添加后执行go mod tidy即可正常编译。
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

