从 0 到 1 创建、测试并发布属于自己的 Go 开源库

前言

在日常开发中,我们经常使用由组织或个人开发和维护的第三方开源库,这些库大大提高了我们的开发效率,让我们能够专注于实现业务逻辑而不是重复造轮子。如果你对提高代码复用感兴趣,并希望将自己封装的高质量代码发布为一个开源库,那么这篇文章正是为你准备的。

接下来,我将详细探讨如何从 01 创建、测试并发布属于自己的 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 选项,将其设置为一个公开仓库。由于我们的目的是创建一个空仓库,所以不需要勾选初始化 READMEgitignore 以及 licence 版权的信息。

完成这些设置后,GitHub 将显示一个新页面,提供几种初始化仓库的选项。对我们来说,重点是如何将本地仓库与远程仓库连接。以下是一个以 go-mongox 仓库为例的连接教程:

bash 复制代码
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 复制代码
go mod init github.com/chenmingyong0423/go-mongox

模块名称推荐使用 github.com/${用户名 | 组织名}/${仓库名} 的格式。

编写代码和测试用例

go-mongox 仓库为例,创建路径为 builder/query/bson_build.go.go 文件,在该文件里编写一个 Id 函数,用于快速构建基于 Id 查询数据的 BSON 语句。

go 复制代码
package query

func Id(value any) bson.D {
    return bson.D{bson.E{Key: types.Id, Value: value}}
}

然后在测试文件 builder/query/bson_build_test.go 里编写测试代码:

go 复制代码
package query

func TestId(t *testing.T) {
    testCases := []struct {
        name  string
        value any
        want  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 仓库啦。

bash 复制代码
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 编辑版本 → 输入 tagRelease title 和版本描述 → 点击 Publish release 按钮发布版本。

下面是详细的步骤描述:

首先,访问 go-mongox 来到仓库主页,点击右下方的 Releases 选项,进入到版本列表页。

进入到列表页之后,点击右上方的 Draft a new release 按钮进入到版本发布页。

接着选择 tag(输入不存在的 tag 将被自动创建),命名格式推荐 vx.x.x。然后输入版本号 Release title(和 tag 命名一致)和编写版本描述,最后点击 Publish release 按钮进行版本的发布。

验证发布成功

发布我们自己的 Go 库之后,我们就可以在其他项目中安装并使用它啦。

  • 安装模块

    shell 复制代码
    > go get github.com/chenmingyong0423/go-mongox
    
    go: downloading github.com/chenmingyong0423/go-mongox v0.18.1
    ···
    ···
  • 使用

    go 复制代码
    package main
    
    import "github.com/chenmingyong0423/go-mongox/builder/query"
    
    func main() {
            b := query.Id("陈明勇")
    }

小结

本文详细探讨了如何从 01 创建、测试并发布属于自己的 Go 开源库。整个流程并不复杂,但需特别注意的地方是 module 模块的命名规范以及 tag 标签和版本号的命名规范性。此外,添加一个.gitignore 文件和版权信息,有助于用于过滤掉不必要的文件和目录,明确指出其他人使用你的代码的许可和条件。

为了进一步提升开源库的质量和维护性,我们可以考虑扩展一些额外的功能。例如,利用 Git 钩子(Git hooks)自动对代码进行格式校验或运行测试,确保只有通过测试的代码才能提交到仓库。

此外,我们还可以使用 Makefile 来简化构建和部署过程。通过定义 make 命令,你可以一键完成构建、测试、部署等多项任务,这样不仅提升了开发效率,也保证了操作的一致性和可重复性。详情可参考 go-mongox 项目。

相关推荐
SamDeepThinking21 分钟前
并发量就算只有2,该上锁还得上呀
java·后端·架构
该昵称用户已存在1 小时前
从边缘计量到碳足迹追踪:MyEMS 开源一体化架构的全栈拆解
架构·开源
xmdy58662 小时前
Flutter+开源鸿蒙实战|智安盾电商溯源平台Day1 项目搭建与整体方案拆解
flutter·开源·harmonyos
该昵称用户已存在2 小时前
以开源筑基,架构先行——深度拆解 MyEMS 微服务能源管理系统的技术内核
微服务·架构·开源
Hommy884 小时前
【开源剪映小助手】字幕接口
开源·github·aigc·剪映小助手·视频剪辑自动化
永远不会的CC5 小时前
浙江华昱欣实习(4月23日~ 4月19日)
后端·学习
直奔標竿6 小时前
Java开发者AI转型第二十五课!Spring AI 个人知识库实战(四)——RAG来源追溯落地,拒绝AI幻觉
java·开发语言·人工智能·spring boot·后端·spring
嘟嘟MD6 小时前
程序员副业 | 2026年4月复盘
后端·创业
时空系6 小时前
认识Rust——我的第一个程序 Rust中文编程
开发语言·后端·rust
DevilSeagull6 小时前
Windows 批处理 (Batch) 编程: 从入门到入土. (一) 基础概念与环境配置
开发语言·windows·后端·batch·语言