作者:陈明勇
个人网站:https://chenmingyong.cn
文章持续更新,如果本文能让您有所收获,欢迎点赞收藏加关注本号。 微信阅读可搜《程序员陈明勇》。 这篇文章已被收录于 GitHub https://github.com/chenmingyong0423/blog,欢迎大家 Star 催更并持续关注。
前言
在日常开发中,我们经常使用由组织或个人开发和维护的第三方开源库,这些库大大提高了我们的开发效率,让我们能够专注于实现业务逻辑而不是重复造轮子。如果你对提高代码复用感兴趣,并希望将自己封装的高质量代码发布为一个开源库,那么这篇文章正是为你准备的。
接下来,我将详细探讨如何从 0
到 1
创建、测试并发布属于自己的 Go
开源库。本文以 go-mongox 仓库为例进行讲解。
准备好了吗?准备一杯你最喜欢的咖啡或茶,随着本文一探究竟吧。
总体步骤
从 0
到 1 创建、测试并发布属于自己的 Go 库,需要以下步骤:
- 1、在
Github
(或Gitee
,本文以Github
为例) 上创建一个空仓库; - 2、本地初始化
Go
项目; - 3、本地初始化
Git
仓库; - 4、编写代码和测试用例;
- 5、提交代码并推送到
Github
; - 6、发布版本;
- 7、验证发布成功。
当然,如果我们本地已经存在一个准备好的 Go
项目仓库,我们可以直接在 Github
上面创建仓库并推送最新内容,然后从第六步开始。
创建 Github 仓库
在 GitHub
上创建仓库是发布你的 Go
库的第一步。
首先,访问 GitHub
仓库并点击 New
按钮。在创建页面,为你的仓库输入名称和简短描述。确保选择 Public
选项,将其设置为一个公开仓库。由于我们的目的是创建一个空仓库,所以不需要勾选初始化 README
和 gitignore
以及 licence
版权的信息。
完成这些设置后,GitHub
将显示一个新页面,提供几种初始化仓库的选项。对我们来说,重点是如何将本地仓库与远程仓库连接。以下是一个以 go-mongox 仓库为例的连接教程:
git remote add origin git@github.com:chenmingyong0423/go-mongox.git
git branch -M main
git push -u origin main
本地初始化 Go
项目
使用 go mod init
命令初始化 Go
项目。
go mod init github.com/chenmingyong0423/go-mongox
模块名称推荐使用 github.com/${用户名 | 组织名}/${仓库名}
的格式。
编写代码和测试用例
以 go-mongox 仓库为例,创建路径为 builder/query/bson_build.go
的 .go
文件,在该文件里编写一个 Id
函数,用于快速构建基于 Id
查询数据的 BSON
语句。
package queryfunc Id(value any) bson.D {return bson.D{bson.E{Key: types.Id, Value: value}}
}
然后在测试文件 builder/query/bson_build_test.go
里编写测试代码:
package queryfunc TestId(t *testing.T) {testCases := []struct {name stringvalue anywant bson.D}{{name: "test id",value: "Mingyong Chen",want: bson.D{bson.E{Key: "_id", Value: "Mingyong Chen"}},},}for _, tc := range testCases {t.Run(tc.name, func(t *testing.T) {assert.Equal(t, tc.want, Id(tc.value))})}
}
运行测试用例,确保可以得到预期的运行结果。
除了功能性的代码之外,我们还可以考虑添加一个 .gitignore
文件,用于过滤掉不必要的文件和目录,比如编译产生的临时文件或者编辑器生成的配置文件。此外,添加版权信息也是一个重要决策。可以在源代码文件的头部添加版权声明,以及在仓库中包含一个 LICENSE
文件,明确指出其他人使用你的代码的许可和条件。
提交代码并推送到 Github
编写代码并测试通过之后,我们就可以把代码推送到远程的 Github
仓库啦。
git remote add origin git@github.com:chenmingyong0423/go-mongox.git
git branch -M main
git push -u origin main
发布版本
当 Github
仓库接收到最新的代码之后,我们就可以为自己的 Go
库发布第一个版本啦。
总体流程是这样的:访问仓库主页 → 点击 Releases
访问版本列表页 → 点击 Draft a new release
编辑版本 → 输入 tag
、Release title
和版本描述 → 点击 Publish release
按钮发布版本。
下面是详细的步骤描述:
首先,访问 go-mongox 来到仓库主页,点击右下方的 Releases
选项,进入到版本列表页。
进入到列表页之后,点击右上方的 Draft a new release
按钮进入到版本发布页。
接着选择 tag
(输入不存在的 tag
将被自动创建),命名格式推荐 vx.x.x
。然后输入版本号 Release title
(和 tag
命名一致)和编写版本描述,最后点击 Publish release
按钮进行版本的发布。
验证发布成功
发布我们自己的 Go
库之后,我们就可以在其他项目中安装并使用它啦。
-
安装模块
> go get github.com/chenmingyong0423/go-mongoxgo: downloading github.com/chenmingyong0423/go-mongox v0.18.1 ··· ···
-
使用
package mainimport "github.com/chenmingyong0423/go-mongox/builder/query"func main() {b := query.Id("陈明勇") }
小结
本文详细探讨了如何从 0
到 1
创建、测试并发布属于自己的 Go
开源库。整个流程并不复杂,但需特别注意的地方是 module
模块的命名规范以及 tag
标签和版本号的命名规范性。此外,添加一个.gitignore
文件和版权信息,有助于用于过滤掉不必要的文件和目录,明确指出其他人使用你的代码的许可和条件。
为了进一步提升开源库的质量和维护性,我们可以考虑扩展一些额外的功能。例如,利用 Git
钩子(Git hooks
)自动对代码进行格式校验或运行测试,确保只有通过测试的代码才能提交到仓库。
此外,我们还可以使用 Makefile
来简化构建和部署过程。通过定义 make
命令,你可以一键完成构建、测试、部署等多项任务,这样不仅提升了开发效率,也保证了操作的一致性和可重复性。详情可参考 go-mongox 项目。