从 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 项目。

相关推荐
tan180°3 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
AI生存日记3 小时前
百度文心大模型 4.5 系列全面开源 英特尔同步支持端侧部署
人工智能·百度·开源·open ai大模型
优创学社24 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端
why技术4 小时前
Stack Overflow,轰然倒下!
前端·人工智能·后端
幽络源小助理4 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
步、步、为营4 小时前
.net开源库SignalR
开源·.net
ai小鬼头5 小时前
AIStarter如何助力用户与创作者?Stable Diffusion一键管理教程!
后端·架构·github
简佐义的博客5 小时前
破解非模式物种GO/KEGG注释难题
开发语言·数据库·后端·oracle·golang
Code blocks5 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins