sponge 是一个快速生成web和微服务项目代码工具,也是一个基于gin和grpc封装的微服务框架。sponge拥有丰富的生成代码命令,一共生成12种不同功能代码,这些功能代码可以组合成完整的服务(类似人为打散的海绵细胞可以自动重组成一个新的海绵)。微服务代码功能包括日志、服务注册与发现、注册中心、限流、熔断、链路跟踪、指标监控、pprof性能分析、统计、缓存、CICD等功能。代码解耦模块化设计,很容易构建出从开发到部署的完整项目代码,让使用go语言开发项目更便捷、轻松、高效。
项目地址:https://github.com/zhufuyi/sponge
使用文档:https://go-sponge.com/
视频教程:https://space.bilibili.com/1440482691/video
在线生成代码demo: https://go-sponge.com/ui/
sponge 生成命令框架
生成代码基于Yaml、SQL DDL和Protocol buffers三种方式,每种方式拥有生成不同功能代码,生成代码的框架图如图1-1所示:
图1-1 sponge生成代码框架图
微服务框架
sponge生成的微服务代码框架如图1-2所示,这是典型的微服务分层结构,具有高性能,高扩展性,包含常用的服务治理功能。
图1-2 微服务框架图
微服务主要功能:
- Web 框架 gin
- RPC 框架 grpc
- 配置解析 viper
- 配置中心 nacos
- 日志 zap
- 数据库组件 gorm
- 缓存组件 go-redis ristretto
- 文档 swagger
- 鉴权 jwt
- 校验 validator
- 限流 ratelimit
- 熔断 circuitbreaker
- 链路跟踪 opentelemetry
- 监控 prometheus, grafana
- 服务注册与发现 etcd, consul, nacos
- 性能分析 go profile
- 代码规范检查 golangci-lint
- 持续集成部署 CICD jenkins docker, kubernetes
代码目录结构遵循 project-layout,代码目录结构如下所示:
.
├── api # proto文件和生成的*pb.go目录
├── assets # 其他与资源库一起使用的资产(图片、logo等)目录
├── build # 打包和持续集成目录
├── cmd # 程序入口目录
├── configs # 配置文件的目录
├── deployments # IaaS、PaaS、系统和容器协调部署的配置和模板目录
├─ docs # 设计文档和界面文档目录
├── internal # 私有应用程序和库的代码目录
│ ├── cache # 基于业务包装的缓存目录
│ ├── config # Go结构的配置文件目录
│ ├── dao # 数据访问目录
│ ├── ecode # 自定义业务错误代码目录
│ ├── handler # http的业务功能实现目录
│ ├── model # 数据库模型目录
│ ├── routers # http路由目录
│ ├── rpcclient # 连接rpc服务的客户端目录
│ ├── server # 服务入口,包括http、rpc等
│ ├── service # rpc的业务功能实现目录
│ └── types # http的请求和响应类型目录
├── pkg # 外部应用程序可以使用的库目录
├── scripts # 用于执行各种构建、安装、分析等操作的脚本目录
├── test # 额外的外部测试程序和测试数据
└── third_party # 外部帮助程序、分叉代码和其他第三方工具
web服务和rpc服务目录结构基本一致,其中有一些目录是web服务独有(internal目录下的routers、handler、types),有一些目录是rpc服务独有(internal目录下的service)。
生成项目代码界面
生成12种不同功能代码命令都已经做了UI界面,使用起来更加方便,在线生成代码demo: https://go-sponge.com/ui/,可以下载sponge在本地使用。
例如创建web服务完整项目如下图所示: