人们无法使用 gomodules 使用我的 v2+ 语义版本控制版本
Posted
技术标签:
【中文标题】人们无法使用 gomodules 使用我的 v2+ 语义版本控制版本【英文标题】:People can't use my v2+ semantic versioning release using gomodules 【发布时间】:2020-03-10 16:49:56 【问题描述】:我正在维护一个使用Semantic Versioning 发布的公司go 库。我切换到 go modules 用于库内的依赖管理,并在 v2+ 之后创建了一个新版本。我使用了here 记录的第一个策略,其中涉及修改 go.mod 文件和导入路径。
现在当人们使用 go get 命令时(在同样使用 go 模块的 repo 中)会出现错误:
invalid version: module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v3
有人熟悉这个问题吗?
为了让事情更简单,我创建了一个类似的简单示例:
我有包含三个文件(不包括 .gitignore)的 repo (github.com/Graphmasters/testing-gomod-versioning)。这些文件是:
methods/method.gopackage methods
func Method()
println("Method")
main.go
package main
import (
"github.com/Graphmasters/testing-gomod-versioning/v3/methods"
)
func main()
methods.Method()
go.mod
module github.com/Graphmasters/testing-gomod-versioning/v3
go 1.13
在 repo 中,我基于带有此代码的分支创建了一个带有标签 v3.0.0 的版本。
在使用 go modules 的 repo 中运行以下命令时遇到上述错误:
go get "github.com/Graphmasters/testing-gomod-versioning@v3.0.0"
【问题讨论】:
【参考方案1】:模块名称必须是 github.com/Graphmasters/testing-gomod-versioning/v3 或 github.com/Graphmasters/testing-gomod-versioning.v3 而不是 github.com/Graphmasters/testing-gomod-versioning
用户应该能够使用 github.com/Graphmasters/testing-gomod-versioning/v3@v3.0.0 而不是 github.com/Graphmasters/testing-gomod-versioning@v3.0.0
示例:可以查看以下v3包的mod文件-https://search.gocenter.io/gotest.tools~2Fv3/info?version=v3.0.0
【讨论】:
在我给出的例子中,我已经有了 github.com/Graphmasters/testing-gomod-versioning/v3。使用go get github.com/Graphmasters/testing-gomod-versioning/v3@v3.0.0
没有用,虽然go get github.com/Graphmasters/testing-gomod-versioning/v3
用了,但我们需要特定的版本。我通过下载 github.com/olivere/elastic 的特定版本进行了检查,并且该版本有效,因此尚不清楚在这种情况下出现了什么问题。
好的,谢谢。在最初提供的示例中,go get
示例中缺少 v3 后缀,因此不确定。 v3.0.0 标签是使用 go.mod 创建的,引用 github.com/Graphmasters/testing-gomod-versioning/v3 作为模块名称吗?什么错误?以上是关于人们无法使用 gomodules 使用我的 v2+ 语义版本控制版本的主要内容,如果未能解决你的问题,请参考以下文章
使用GoModule(Using Go Modules译文)
迁移到GoModule(Migrating to Go Modules译文)