如何在GitHub上发布嵌套Go子模块并获取对应版本?
解决Go子包版本与主仓库版本不一致的问题
问题原因
- 最初
ptr目录存在独立go.mod,被Go识别为独立模块,主仓库的v1.0.1标签不会关联到这个子模块,因此go get子模块时只能生成伪版本。 - 移除子模块的
go.mod后,ptr成为主模块的子包,但要让子包版本和主仓库保持一致,需要规范后续的版本发布流程。
解决方案
维持子包无独立
go.mod的状态
你已经在v1.0.2版本中移除了ptr目录的go.mod,这是正确的做法,此时ptr作为github.com/Siiir/unsafe的子包存在,不再是独立模块。规范版本发布流程
- 每次发布主仓库版本(如v1.0.3、v2.0.0等)时,直接在仓库根目录的目标提交上打
vX.Y.Z格式的语义化版本标签。 - 只要
ptr子包的代码变更包含在该提交中,后续通过go get github.com/Siiir/unsafe/ptr@vX.Y.Z就能获取到对应版本的子包,版本号与主仓库完全一致。
- 每次发布主仓库版本(如v1.0.3、v2.0.0等)时,直接在仓库根目录的目标提交上打
清理本地缓存(若有遗留问题)
如果之前的伪版本缓存干扰新版本获取,执行以下命令清理模块缓存:go clean -modcache之后重新执行
go get github.com/Siiir/unsafe/ptr@v1.0.2即可获取正确版本。验证版本一致性
发布新版本后,用以下命令验证:go list -m github.com/Siiir/unsafe@vX.Y.Z go list -m github.com/Siiir/unsafe/ptr@vX.Y.Z两者返回的版本号应完全相同,确认子包与主仓库版本一致。
内容的提问来源于stack exchange,提问作者Siiir
相关产品推荐
相关产品推荐

