掘金 后端 ( ) • 2024-04-22 11:15

theme: smartblue

掘金引流图片.png

前言

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

接下来,我将详细探讨如何从 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 仓库为例的连接教程:

git remote add origin [email protected]: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 query

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

然后在测试文件 builder/query/bson_build_test.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 仓库啦。

git remote add origin [email protected]: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 选项,进入到版本列表页。

1.jpg

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

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

3.jpg

验证发布成功

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

  • 安装模块

    > go get github.com/chenmingyong0423/go-mongox
    
    go: downloading github.com/chenmingyong0423/go-mongox v0.18.1
    ···
    ···
    
  • 使用

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