Go语言同仓库多项目共享公共包时软链接不生效问题咨询
Go同仓库多项目共享公共包解决方案
软链接支持说明
Go官方工具链不支持通过软链接引用本地公共包。Go modules的设计依赖实际文件路径计算模块校验和、定位依赖,构建过程中会默认忽略软链接,即使创建软链接也会出现包找不到、go.sum校验不通过等错误,因此不建议使用软链接实现代码共用。
可行实现方案
- 方案1:同仓库内使用
replace指令(最适配当前单仓库多项目场景)
可以直接基于现有结构配置go mod替换规则,也可以调整目录结构统一管理公共包:- 推荐先将公共包从
project1目录下移到仓库根目录统一维护,调整后目录结构参考:/myRepo /common /myPackage go.mod /file1.go /file2.go /project_1 go.mod /project_2 go.mod - 给公共包添加
go.mod文件,声明模块名:module your_repo_domain/your_account/myRepo/common/myPackage go 1.20 // 对应你的Go版本即可 - 分别在
project1和project2的go.mod中添加本地路径替换规则:replace your_repo_domain/your_account/myRepo/common/myPackage => ../common/myPackage - 两个项目中正常导入公共包即可使用:
import "your_repo_domain/your_account/myRepo/common/myPackage"
project2的go.mod中添加如下规则,直接复用project1下的公共包:replace your_repo_domain/your_account/myRepo/project1/myPackage => ../project1/myPackage - 推荐先将公共包从
- 方案2:拆分独立公共模块
如果该公共包后续需要给多个仓库复用,可以将其拆分为独立的Git模块,推送到代码托管平台,两个项目直接通过go get拉取对应版本的公共包使用即可。
内容的提问来源于stack exchange,提问作者overunderstack
相关产品推荐
相关产品推荐

