Go脚手架:5分钟开发2个Web服务,7个REST资源代码实现
今天介绍 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。
往期文章回顾
- 重磅!分享一个非常易用的Go开发脚手架
- 分享一个超高效的 Go 项目开发脚手架
- Go 进阶星球上线!5 套白菜价体系课彻底让你学会 Go 项目开发!
- 硬核来袭:分享一个超级优秀的 Go 实战项目,不优秀接受板砖!
- 知识星球:云原生 AI 实战营,10+ 高质量体系课( Go、云原生、AI Infra)、15+ 实战项目,助你提高技术天花板,入大厂、拿高薪;
- 微信GZH:令飞编程,分享 Go、云原生、AI Infra 相关技术。回复「资料」免费下载 Go、云原生、AI 等学习资料;
- 哔哩哔哩:令飞编程 ,分享技术、职场、面经等,并有免费直播课「云原生AI高新就业课」,大厂级项目实战到大厂面试通关。
更多推荐

所有评论(0)