开发 Go 程序,我们经常引用第三方模块。那么,怎么发布自己编写的模块呢?
请注意,一个版本打过标签发布后就不能再修改了。因为 Go 工具链用第一个下载副本来做验证,两个副本不同,就会报安全错误。与其修改先前发布版本的代码,不如发布一个新版本。
代码仓库
Go 模块代码通常采用 Git 来管理,代码仓库可以直接托管到 Github 上。为了演示 Go 模块的发布步骤,我在 Github 上建了一个极小化模块:fasionchan/goutils 。
模块初始化
代码仓库建好后还空空如也,我们先执行 go mod init
命令进行初始化(init 后面的参数是模块名):
|
|
该命令在当前目录下创建了 go.mod 文件,用来保存模块元数据,内容大致如下:
|
|
至此,我们已经得到一个合法的 Go 模块!只是它没有提供任何代码,所以还没啥卵用。不过没关系,我们现在就给它加点代码。在代码仓库下新建 version.go 源文件:
|
|
这段代码只提供一个函数,返回模块的版本号。麻雀虽小,五脏俱全,用来演示足矣。
发布步骤
Go 模块准备好后,只需简单几步,即可将其发布出去:
-
打开命令行并进入模块根目录;
-
执行
go mod tidy
命令,删除一些不必要的模块依赖;我们演示发布的模块没有引用任何依赖,因此这步可有可无;
-
执行测试用例,最后一次确认代码运行无误;
1
go test ...
go test
命令执行模块的单测用例,用例可以用 Go 语言的测试框架来写。我们演示的模块没有测试用例,因此这步也可以跳过。 -
执行
git tag
命令,用新版本号打标签;1 2 3 4 5
# 提交代码 git commit -m "first version" # 打标签 git tag v1.0.0
版本号必须符合模块版本命名规则,以便让用户知晓代码变更情况(接口是否兼容)。
-
将新标签推到原仓库(如 Github );
1
git push origin v1.0.0
-
执行
go list
命令触发 Go 更新模块索引信息,确保新发布的模块可用;1
GOPROXY=proxy.golang.org go list -m github.com/fasionchan/goutils@v1.0.0
注意到,我们在命令之前设置了 GOPROXY 环境变量,指定使用 proxy.golang.org 作为 Go 代理。这可以确保我们请求到官方代理,而不是各种加速镜像。
至此,我们的模块就成功发布了!跟其他模块一样,开发人员只要在代码中 import ,然后执行 go get
命令即可使用它。go get
命令可以指定模块版本,不指定则默认获取最新版本:
|
|
【小菜学Go语言】系列文章首发于公众号【小菜学编程】,敬请关注: