今天介绍 OneXStack 技术栈中的 Go 项目开发脚手架 osbuilder 是如何将至少 1 周的开发任务,缩减到 5 分钟的。

osbuilder 工具介绍

osbuilder 是一个 Go 项目开发脚手架,可以一键生成一个符合 Go 最佳实践的 Go 项目。该项目集合了我过去对 Go 项目开发、对技术、对架构的思考和经验。个人感觉生成的 Go 项目从代码质量、扩展能力、灵活性等方面,都处在一个很不错的水平。是个非常值得学习的 Go 项目构建方式。

osbuilder 工具的 GitHub 项目仓库见:https://github.com/onexstack/osbuilder

试想一下:老板安排了一个开发任务

大家试着想一下,老板安排一个任务,要求分别开发 2 个 Web 服务器:

  • os-apiserver:提供 HTTP 接口,对外部客户暴露,包含至少 5 个 REST 资源;
  • os-jobserver:提供 gRPC 接口,应用内暴露,也至少包含 2 个 REST 资源;

上述 Web 服务器,还要求实现默认值设置、参数校验、数据持久化到 MySQL、并且具备源码编译脚本。os-apiserver 因为对外部开发者暴露,所以还需要实现认证功能。

大家试着想象一下,开发、并测试通过上述 2 个 Web 服务器需要耗时多久?3 天?一周?2 周?我自己评估了下,如果我来从零开发的话,大概需要至少 4 天时间:1 天开发应用框架、1 天开发 os-apiserver 的 REST 资源空逻辑实现、0.5 天开发 os-jobserver 的 REST 资源实现、1.5 天来测试 2 个服务。

那么使用 osbuilder 工具,来实现上述要求,需要多久?答案是只需要 5 分钟不到。接下来,我就来介绍下如何使用 osbuilder 工具,快速开发上述项目。

使用 osbuilder 工具开发 2 个 Web 服务器

首先需要安装 osbuilder 工具。安装命令如下:

$ go install github.com/onexstack/osbuilder/cmd/osbuilder@latest
$ osbuilder version

接下来只需要执行以下 3 步,便可以实现老板安排的任务。

步骤 1:生成项目配置文件

配置文件如下,保存在 osdemo.yaml 文件中:

scaffold: osbuilder
version: v0.0.8
metadata:
  # 当指定deploymentMethod为docker、kubernetes时,构建镜像的地址
  registry: docker.io
  # 选择二进制文件的部署形式。当前近支持systemd。未来会支持docker、kubernetes,会生产Dockerfile、Kubernetes YAML 等资源
  deploymentMethod: systemd
  # 控制 Makefile 的生成方式。当前支持以下 3 种:
  # - none:不生成 makefile
  # - structured:生成单个 makefile
  # - unstructured:生成结构化的 makefile
  makefileMode: unstructured
  # 项目创建者名字,用于生成版权信息
  author: 孔令飞
  # 项目创建者邮箱,用于生成版权信息
  email: colin404@foxmail.com
# osbuilder 支持多种应用类型。当前仅支持 Web 服务类型
# 未来会支持:异步任务 Job 类型、命令行工具类型、声明式API服务器类型
webServers:
  - binaryName: os-apiserver
    # Web Server 使用的框架。当前支持 gin、grpc
    # 未来会支持kratos、grpc-gateway、go-zero、kitex、hertz等
    webFramework: gin
    # Web Server 后端使用的存储类型。当前支持 memory、mysql
    # 未来会支持etcd、redis、sqlite、mongo、postgresql
    storageType: memory
    # 是否添加健康检查接口
    withHealthz: true
    # 是否添加用户默认,开启后,有完整的认证、鉴权流程
    withUser: true
    # 是否生成注册/反注册到腾讯北极星服务中心的代码
    withPolaris: false
  - binaryName: os-jobserver
    # Web Server 使用的框架。当前支持 gin、grpc
    # 未来会支持kratos、grpc-gateway、go-zero、kitex、hertz等
    webFramework: grpc
    # 可选,当 webFramework 为 grpc 时有效,指定 grpc 服务的名字
    grpcServiceName: JobServer
    # Web Server 后端使用的存储类型。当前支持 memory、mysql
    # 未来会支持etcd、redis、sqlite、mongo、postgresql
    storageType: memory
    # 是否添加健康检查接口
    withHealthz: true
    # 是否添加用户默认,开启后,有完整的认证、鉴权流程
    withUser: false
    # 是否生成注册/反注册到腾讯北极星服务中心的代码
    withPolaris: false

上述配置文件,配置了 2 个 Web 服务器:

  • os-apiserver:使用 gin 框架,并生产用户相关代码,带认证能力,使用内存数据库,这里也可以改成 MySQL;
  • os-jobserver:使用 gRPC 框架,使用内存数据库;

步骤 2:生成项目

假设项目名为 osdemo。生成命令如下:

$ osbuilder create project --config osdemo.yaml osdemo
...

步骤 3:分别给每个 Web 服务器添加 REST 资源

根据上述命令的提示,进入到 osdemo 项目目录下,并执行以下命令生成 REST 资源的实现代码:

$ cd /home/colin/workspace/golang/src/github.com/onexstack/osdemo
$ osbuilder create api -b os-apiserver --kinds product,order,payment,inventory,cart
$ osbuilder create api -b os-jobserver --kinds cron_job,job

上述命令生成了 具有 1w 行代码的代码仓库:

步骤 4:编译并运行

执行以下代码,编译并运行 os-apiserver、os-builder:

$ make protoc # 编译 protobuf文件
$ go mod tidy # 下载 Go 依赖包
$ go generate ./... # 生成 wire 依赖注入
$ make build # 编译 os-apiserver、os-jobserver
$ _output/platforms/linux/amd64/os-apiserver --jwt-key abcde123456 # 启动 os-apiserver 服务器
$ curl http://127.0.0.1:5555/healthz # 测试 os-apiserver 服务器
$ _output/platforms/linux/amd64/os-jobserver # 启动 os-jobserver 服务器
$ go run examples/client/cronjob/main.go

上述命令成功编译、运行、测试成功。之后,你便可以在 internal/<server_name>/biz/v1/ 目录下实现每个 REST 资源的具体业务逻辑代码了。其他代码 osbuilder 工具已经为你实现好了。

写在最后

可以看到原本至少 4 天的开发任务,通过 osbuilder 直接缩短到 5 分钟以内。而且还能够保证所有的 Web 服务器开发风格一致、代码规范一致、目录结构一致。这些一致的代码实现,可以大大提高未来项目的维护效率。

实际上对于很多开发者,尤其是新手 Go 开发者来说,要想实现上述代码,至少需要 1~2 周时间。用 osbuilder 工具 5 分钟就可以实现,省出来的时间,早点下班、学习、摸鱼不好吗?

实际上,如果未来你有更多的 REST 代码需要实现,只需要执行以下命令即可:

 osbuilder create api -b os-apiserver --kinds rest1,rest2,...

使用 osbuilder 工具,可以极大的提高你的开发效率,还不快试试?

osbuilder 工具生成项目有完整的课程,如果你想学习,可以加入我的「云原生 AI 实站营」 知识星球:https://t.zsxq.com/5T0qC

往期文章回顾

  • 知识星球:云原生 AI 实战营,10+ 高质量体系课( Go、云原生、AI Infra)、15+ 实战项目,助你提高技术天花板,入大厂、拿高薪;
  • 微信GZH:令飞编程,分享 Go、云原生、AI Infra 相关技术。回复「资料」免费下载 Go、云原生、AI 等学习资料;
  • 哔哩哔哩:令飞编程 ,分享技术、职场、面经等,并有免费直播课「云原生AI高新就业课」,大厂级项目实战到大厂面试通关。
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐