此时我正在为多个存储库使用 Go 1.11 模块。现在我正在处理一个已经是 1.x 版本的。结合移动到 go 模块,我做了一些其他重大更改,所以很明显是时候增加存储库的主要版本了。这意味着转到版本 2。
根据“go 命令”文档:
To preserve import compatibility, the go command requires that modules with major version v2 or later use a module path with that major version as the final element. For example, version v2.0.0 of example.com/m must instead use module path example.com/m/v2, and packages in that module would use that path as their import path prefix, as in example.com/m/v2/sub/pkg. Including the major version number in the module path and import paths in this way is called "semantic import versioning".
这是否就像更新我的 go.mod
文件的第一行,将 /v2
附加到模块名称一样简单?或者我应该在我的存储库中创建一个 v2/
目录并将所有文件移动到那里吗?
最佳答案
关于如何移动到版本 2 有两个选项:分支和子目录。您可以在 https://research.swtch.com/vgo-module 阅读更多关于它们的信息(带有更好的插图) .
这两个选项使一个版本可以依赖另一个版本。例如,当您实现版本 2 时,您可以更新版本 1 以依赖于版本 2(但保持相同的 v1 API)。然后,您只需要为您的库实现一种逻辑。根据项目类型、您要提供的支持以及所需的修复,这可能适合您也可能不适合您。
分支机构
master: A -> B (v1.0.0) -> D (v1.0.1)
\
v2: -> C (v2.0.0)
在这种情况下:
- 您在
master
分支上开始您的项目, - 进行一些提交(
A
和B
), - 标记
v1.0.0
。 - 您决定进行重大更改。因此,您创建了一个新分支 (
git checkout -b v2
) 并进行了重大更改。您的 go.mod 现在必须更新,以便模块名称以/v2
结尾(它本质上是一个新模块!)。 - 您决定修复
v1
中的错误,因此您返回该分支,进行新的提交,并标记一个新的v1
版本。
当用户需要您的模块的特定版本时,go
将在两个分支中查找哪个分支提供了正确的模块。
子目录
不想在分支上开发怎么办?您可以为每个主要版本创建一个子目录。版本 1 位于顶层,然后新版本移至子目录:
go.mod (module example.com/foo)
foo.go
v2/
go.mod (module example.com/foo/v2)
foo.go
当您使用新版本标记此 repo 时,v1
将使用顶级版本。 v2
标签将使用 v2
子目录。
关于go - 将存储库升级到 v2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53344471/