开发了一个Go模块,该如何发布呢?

前言

早些时间小鱼为了能监控微博大 V 对基金趋势的分享,以及大 V 的公开的实盘操作,弄了一个微博推文监控模块,也上传到了 github,但在项目中调用的时候发现版本并不是我所发布的。

譬如:发布版本为 v 1.0,但是下载的版本却是 v0.0.0-20240318074646-d39b0bad549d 这种格式,并不是小鱼所定义的版本号,而是默认生成的版本号。

由于对项目开发没太大影响,小鱼当时并没有去理会这种小问题。

项目到现在已经稳定运行了一段时间,但昨天这个微博监控模块突然遇到一些无法解析的情况,正好趁这个机会把 Go 模块版本规则弄明白。

创建 Go 模块

Go 项目代码通常在 github 上管理托管,如果我们需要上传到 github 上,那么 Go 模块的项目名应当与 GitHub 的仓库对应起来。

go mod init github.com/{username}/{repo-name}

  • username:GitHub 账号名
  • repo-name:仓库名

再去 GitHub 创建这个仓库,名称要一致。后期开发时需要通过 GitHub 来下载该模块。

示例:

shell 复制代码
go mod init github.con/berbai/test

我们可以得到一个 go.mod 文件,内容如下

mod 复制代码
module github.com/berbai/test

go 1.21.4

到这里,我们已经完成对 Go 模块的创建,只是这个 Go 模块没有提供任何代码。

我们来编写一个简单的示例。

go 复制代码
package test

func Version() string {
	return "v1.0.0"
}

有这个 version.go 文件后,我们的 go 模块就有了最简单的功能------获取模版版本。

发布 Go 模块

本地代码与 GitHub 仓库关联这个相信各位老手同志们已经谙熟于心了,为了保证文章连贯性,此处不叙述。

  1. go 模块开发过程中可能涉及到一些未使用的模块依赖,可以通过 go mod tidy 进行清除。
  2. 发布前,做好测试,go test {单测用例文件},本示例中未给出测试文件。
  3. 创建 go 模块版本,其实是通过 git tag {version},将版本号命名为标签名,如 git tag v1.0.0
  4. 通过 git push origin {version} 将 tag 推送至 GitHub,如 git push origin v1.0.0
  5. 最后,go list 刷新 go 模块的索引,如 GOPROXY=proxy.golang.org go list -m github.com/fasionchan/test@v1.0.0,到此我们的 go 模块已经正式发布了。这里的示例指定刷新 go 官方的模块代理(GOPROXY=proxy.golang.org)。

通过 go get 指令可以下载该模块。

shell 复制代码
# 获取最新版本
go get github.com/berbai/test
# 指定版本获取
go get github.com/berbai/test@v1.0.0

到这里似乎并不会出现前言中小鱼遇到的 Go 模块版本问题。但当你随意地命名版本号,比如命名为 v1,这时候你会发现无法通过 v1 获取到 go 模块。

究其原因,go 的模块代理对版本号是由要求的,发布 go 模块版本,版本形式需要遵循要求: https://go.dev/ref/mod#versions

版本号是有具体意义的,比如 v 1.2.3。

  • 1 表示主版本号:发布了不兼容的版本迭代时递增。
  • 2 表示次版本号:发布了功能性更新时递增。
  • 3 表示修订号:发布了 bug 修复类更新时递增

到这里小鱼修改了 go 模块的版本号,遇到的问题也就解决啦。

参考

https://go.dev/ref/mod#versions

相关推荐
AskHarries1 小时前
文件上传系统
后端
止语Lab2 小时前
好的 DX 不等于少写代码——三种语言的摩擦力设计课
后端
吃饱了得干活2 小时前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
程序员天天困2 小时前
Arthas trace 命令怎么用?一行定位最慢那行代码
jvm·后端
Huiturn2 小时前
GPT 5.6 连续编码 10 小时,纯 Python 啃下 Word 二进制格式——doc2docx 实现拆解
后端
用户298698530142 小时前
Python 实现 Excel 与 Markdown 互转的实用指南
后端·python·excel
用户77283104908402 小时前
krono-job:零侵入、单二进制交付的分布式任务调度平台(开源)
后端
Conan在掘金2 小时前
鸿蒙报错速查:Function lacks ending return statement,返回路径漏 return 就炸,根因 + 真解法
后端
人间凡尔赛3 小时前
AI-Native 云原生架构:2026 年从容器编排到智能体编排的范式革命
后端·云原生·架构
IT_陈寒3 小时前
Vue的响应式让我加班到凌晨3点,原来问题出在这
前端·人工智能·后端