0%

Go mod 发布版本

版本号发布

Go模块版本只要分为三个部分如<major>.<minor>.<patch>,例如对于v1.0.1,主版本<major>是1,次版本<minor>是0,补丁版本<patch>是1

v0版本为项目的初始版本,版本不保证稳定行,可以通过git tag来标记版本,将tag推送至仓库即可 v1版本为稳定版本,当你的项目稳定之后,可以标记v1版本对外发布;另外对于稳定之后的预发布版本,由于Go命令首选的是正常版本,而不是预发布版本;可以通过-来制定预发布版本,如v1.0.1-betav1.0.1-alpha;使用的时候需要显示的指定预发布版本go get github.com/p1024k/[email protected] 下面看下怎么发布第一个v0.0.1版本:

创建仓库

首先在你的github仓库创建一个repository,命名为hello,然后将hello项目同步至仓库

标记并推送Tag

通过git标签维护版本。都以master为主仓库,每开发一个版本从master切换出一个分支开发。然后合并回master主分支。在master主分支上执行以下动作。

1
2
git tag v0.0.1
git push origin v0.0.1

在其他项目中引用

在项目中直接导入"github.com/p1024k/hello",然后通过执行 go mod tiny或者go mod build就可以添加新的依赖了

1
2
3
4
5
6
7
8
9
10
package main

import (
"fmt"
"github.com/p1024k/hello"
)

func main() {
fmt.Println(hello.Hello())
}

引入依赖之后 cat go.mod,可以看到已经引入了我们自定义的模块

1
2
3
4
5
6
7
8
module study

go 1.16

require (
github.com/p1024k/hello v0.0.1
)

版本升级

Go模块中规范了一个重要原则

If an old package and a new package have the same import path, the new package must be backwards compatible with the old package.

1
如果旧包和新包具有相同的导入路径,新包必须向后兼容旧包。

v0->v1

假设我们自定义的模块已经稳定了,那么开始要对外发布v1.0.0版本了

  1. 拉取新的分支v1.0.0_branch
  2. git tag v1.0.0 并且推送到远程仓库

v1->v2

v1->v2的升级属于主版本的升级(v2不向后兼容), 这里有两种方式:

  • 创建新的版本目录v2
  • 继续使用v0->v1的升级方式

这里只讲在V1->V2的情况。且只讲继续使用V0->v1的升级方式。

拉取新的分支,修改go.mod路径为github.com/p1024k/hello/v2,基于master分支打tag v2.0.0

1
2
3
4
5
6
7
8
9
10
11
12
13
# checkout from master
git checkout -b v2
go mod edit -module github.com/youdw/hello/v2
...
# make some change
git push
git checkout master
git rebase v2
git tag v2.0.0
git push origin master
git push --tags

# git push origin v2.0.0