go - 带有 v2 Go 模块的项目结构

标签 go

我有一个结构有点像这样的 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/somethingimport 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/

相关文章:

sql - golang gorm 多对多反向引用

postgresql - 无法使用 Helm Charts 使用 Golang 连接到 AWS RDS PostgreSQL

go - 内存错误,Go 中的 html/模板

file - 在 Go 中跳转到文件中的特定行

go - main 只是一个普通的 goroutine 吗?

json - 在 map[string]interface{} 的值上键入 switch 到 []map[string]interface{}

go - go get -u创建失败的go.mod

go - 使用包将字符串从一种格式转换为另一种格式

go - 什么是 reflect.Value 在 golang 中的零值

c++ - vim折叠cpp和golang代码