我有一个结构有点像这样的 Go 项目
github.com/my/coolproject
│
└───project
│ file1.go
│ file2.go
│ go.mod (github.com/my/coolproject/project)
│ ...
│
└───package1
│ file1.go
│ file2.go
│
...
│
packagex
│ file1.go (import github.com/my/coolproject/project/package1)
│ file2.go
我想创建项目的 v2,但不确定如何去做。
我尝试在 repo 的根目录下创建 v2 目录,将项目文件夹的内容复制到其中并将 go.mod 文件更新为 github.com/my/coolproject/project/v2
有了这个,我还必须将导入更新到 v2,但是目录结构现在不完全匹配,所以我不得不更改导入
import github.com/my/coolproject/project/something
到 import github.com/my/coolproject/v2/something
删除'项目'并添加' v2'.
这会导致一堆找不到模块...错误,当我从 v2 中的 go.mod 模块路径中删除“项目”然后它开始工作时。
但是现在原工程导入路径和v2有区别
github.com/my/coolproject/project
为原始 vs v2 github.com/my/coolproject/v2
有没有办法在最后只保留 v2 的原始版本?问题是它并不真正匹配文件夹结构。我想将包含新版本的 v2 文件夹移动到项目文件夹中,但这听起来不是个好主意。
最佳答案
I though about moving the v2 folder with new version into the project folder, but that sounds like a bad idea.
但它似乎遵循“Releasing Modules (v2 or Higher)”上的官方 Go wiki
Major subdirectory:
- Create a new v2 subdirectory (e.g., my/module/v2) and place a new
go.mod
file in that subdirectory.
The module path must end with/v2
.- Copy or move the code into the v3 subdirectory.
- Update import statements within the module to also use
/v2
(e.g.,import "github.com/my/module/v2/mypkg"
).- Tag the release with
v2.0.0
.
另一种方法是:
Major branch:
Update the
go.mod
file to include a/v3
at the end of the module path in the module directive (e.g.,module github.com/my/module/v2
).
- Update import statements within the module to also use
/v2
(e.g.,import "github.com/my/module/v2/mypkg"
).- Tag the release with
v2.0.0
.
那里没有要创建的子文件夹。
如果您希望克隆您的存储库的人默认获得最新版本,您可以将默认分支设置为 v2
分支而不是 main
。
关于go - 带有 v2 Go 模块的项目结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70058951/