Golang:多个模块的单独版本控制

问题描述

想象一下,我有一个仓库github.com/user/golang-examples,我准备对其中的每个示例模块分别进行版本控制:

guthub.com/user/golang-examples
  /modA
    /go.mod
    /pkgA1
    /pkgA2

  /modB
    /go.mod
    /pkgB1
    /pkgB2

(我知道惯用语是“一个仓库-一个模块”,但是多模块项目也有用例,因此这不是讨论的主题

同时,语义git标签v1.0.0v2.0.0等)在 repo 级别上发生,而不是在文件级别上。这样就不可能单独标记模块,例如

  1. 首先,modA在开发中被主要版本取代了modB,并且标签v2.0.0被推送到了回购级别,目的是版本modA
  2. 后来,当人们想要将modB升级到v2时,就无法第二次将相同的v2.0.0 git标签推入版本modB

如何按照golang的版本控制范式完成此任务?同样,这是关于多模块项目的。将模块拆分为存储库的明显解决方在这里是不利的,因为需要顶层存储库的总体“示例”语义。

谢谢!

解决方法

好吧,在继续搜索后,我找到了以下资源:https://github.com/go-modules-by-example/index/blob/master/009_submodules/README.md

根据我的情况,答案是使用:

  • 对于模块modA,使用modA/vX.Y.Z形式的标签(使用语义版本控制)
  • 对于模块modB,使用格式为modB/vX.Y.Z的标签

在上下文中,来自上面的皮棉的引用:

official modules proposal预测大多数项目将采用最简单的方法,即每个存储库使用单个Go模块,这通常意味着在存储库的根目录中创建一个go.mod文件。

由于某些原因,我仍然找不到正确的文档/规格参考。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...