非标准Go模块发布与版本配置问题咨询
问题解答
现有目录结构与标签格式是否可行?
目录结构没问题,但当前的go-vX.X.X标签格式不符合Go模块的版本规则,这才是导致你遇到问题的关键。
Go对子目录模块的版本标签有明确要求:标签必须以模块路径最后一段+斜杠作为前缀,再跟语义化版本号。你的模块路径是github.com/example/newrepo/go,所以正确标签格式应该是go/v0.0.1,而不是用连字符的go-v0.0.1。
现在的标签格式无法被Go工具链识别为对应模块的正式版本,所以go get只能生成伪版本号,而且proxy.golang.org匹配不到对应标签的资源,自然会报404。
基于现有结构的修正步骤
- 先删掉旧标签:
git tag -d go-v0.0.1 - 打正确的标签:
git tag go/v0.0.1 - 推送到远程仓库:
git push origin go/v0.0.1 - 验证:执行
go get github.com/example/newrepo/go@v0.0.1,此时外部项目的go.mod会显示正式版本号;等一会儿pkg.go.dev也会自动抓取并展示该版本的文档。
替代方案(不想改标签格式的话)
如果团队必须用go-vX.X.X这类带连字符的标签,有两种可选方案:
方案1:调整模块路径匹配标签前缀
把go.mod里的模块路径改成github.com/example/newrepo/go-sdk(或其他和标签前缀匹配的名称),然后标签格式改成go-sdk/vX.X.X,让标签前缀和模块路径最后一段一致,Go工具链就能正确识别了。
方案2:拆分Go模块为独立仓库
把go目录单独抽成一个独立的GitHub仓库,比如github.com/example/newrepo-go,这样直接用标准的vX.X.X标签就行,不用加前缀。这种方式更符合Go社区的常规做法,pkg.go.dev的文档发布也更顺畅,还能避免多语言版本标签互相干扰的问题。
内容的提问来源于stack exchange,提问作者lucasjames92
相关产品推荐
相关产品推荐

