English | 简体中文
sponge 是一个集成了 自动生成代码
、Gin和GRPC
的强大的开发框架。sponge拥有丰富的生成代码命令,生成不同的功能代码可以组合成完整的服务(类似人为打散的海绵细胞可以自动重组成一个新的海绵)。sponge提供了一站式项目开发(生成代码、开发、测试、api文档、部署),大幅提高了开发效率和降低了开发难度,以"低代码方式"开发高质量项目。
sponge 的核心设计理念是通过 SQL
或 Protobuf
文件逆向生成模块化的代码,这些代码可以灵活、无缝地组合成多种类型的后端服务,从而大大提升开发效率,简化后端服务开发,sponge 的主要目标如下:
- 如果开发只有 CRUD api 的 web 或 gRPC 服务,不需要编写任何 go 代码就可以编译并部署到 linux 服务器、docker、k8s 上,只需要连接到数据库就可以一键自动生成完整的后端服务 go 代码。
- 如果开发通用的 web、gRPC、http+gRPC、gRPC 网关等服务,只需聚焦
在数据库定义表
、在protobuf文件定义api描述信息
、在生成的模板文件填写业务逻辑代码
三个核心部分,其他 go 代码(包括CRUD api)都由 sponge 来生成。
sponge 生成代码主要基于 SQL
和 Protobuf
文件,其中 SQL
支持数据库 mysql、mongodb、postgresql、tidb、sqlite。
sponge 生成的服务代码本身是一个微服务,框架图如下图所示,这是典型的微服务分层结构,具有高性能,高扩展性,包含了常用的服务治理功能。
创建的http和grpc服务代码的性能测试: 50个并发,总共100万个请求。
点击查看测试代码。
sponge包含丰富的组件(按需使用):
- Web 框架 gin
- RPC 框架 grpc
- 配置解析 viper
- 配置中心 nacos
- 日志 zap
- 数据库组件 gorm, mongo-go-driver
- 缓存组件 go-redis, ristretto
- 自动化api文档 swagger, protoc-gen-openapiv2
- 鉴权 jwt
- 校验 validator
- Websocket gorilla/websocket
- 定时任务 cron
- 消息队列组件 rabbitmq, kafka
- 分布式事务管理器 dtm
- 分布式锁 dlock
- 自适应限流 ratelimit
- 自适应熔断 circuitbreaker
- 链路跟踪 opentelemetry
- 监控 prometheus, grafana
- 服务注册与发现 etcd, consul, nacos
- 自适应采集 profile
- 资源统计 gopsutil
- 代码质量检查 golangci-lint
- 持续集成部署 CICD jenkins, docker, kubernetes
生成的服务代码目录结构遵循 project-layout。
这是生成的单体应用单体仓库(monolith)
或微服务多仓库(multi-repo)
代码目录结构:
.
├── api # protobuf文件和生成的*pb.go目录
├── assets # 其他与资源库一起使用的资产(图片、logo等)目录
├── cmd # 程序入口目录
├── configs # 配置文件的目录
├── deployments # 裸机、docker、k8s部署脚本目录
├── docs # 设计文档和界面文档目录
├── internal # 业务逻辑代码目录
│ ├── cache # 基于业务包装的缓存目录
│ ├── config # Go结构的配置文件目录
│ ├── dao # 数据访问目录
│ ├── ecode # 自定义业务错误代码目录
│ ├── handler # http的业务功能实现目录
│ ├── model # 数据库模型目录
│ ├── routers # http路由目录
│ ├── rpcclient # 连接grpc服务的客户端目录
│ ├── server # 服务入口,包括http、grpc等
│ ├── service # grpc的业务功能实现目录
│ └── types # http的请求和响应类型目录
├── pkg # 外部应用程序可以使用的库目录
├── scripts # 执行脚本目录
├── test # 额外的外部测试程序和测试数据
├── third_party # 依赖第三方protobuf文件或其他工具的目录
├── Makefile # 开发、测试、部署相关的命令集合
├── go.mod # go 模块依赖关系和版本控制文件
└── go.sum # go 模块依赖项的密钥和校验文件
这是生成的微服务单体仓库(mono-repo)
代码目录结构(也就是大仓库代码目录结构):
.
├── api
│ ├── server1 # 服务1的protobuf文件和生成的*pb.go目录
│ ├── server2 # 服务2的protobuf文件和生成的*pb.go目录
│ ├── server3 # 服务3的protobuf文件和生成的*pb.go目录
│ └── ...
├── server1 # 服务1的代码目录,与微服务多仓库(multi-repo)目录结构基本一样
├── server2 # 服务2的代码目录,与微服务多仓库(multi-repo)目录结构基本一样
├── server3 # 服务3的代码目录,与微服务多仓库(multi-repo)目录结构基本一样
├── ...
├── third_party # 依赖的第三方protobuf文件
├── go.mod # go 模块依赖关系和版本控制文件
└── go.sum # go 模块依赖项的密钥和校验和文件
支持在windows、mac、linux环境下安装sponge,点击查看安装sponge说明。
安装完成后,启动sponge UI服务:
sponge run
在本地浏览器访问 http://localhost:24631
,在UI页面上操作生成代码。
如果想要在跨主机的浏览器上访问,启动UI时需要指定宿主机ip或域名,示例
sponge run -a http://your_host_ip:24631
。 也可以在docker上启动UI服务来支持跨主机访问,点击查看docker启动sponge UI服务说明。
使用sponge开发项目的详细的步骤、配置、部署说明,点击查看sponge开发文档。
- 基于sql创建web服务(包括CRUD)
- 基于sql创建grpc服务(包括CRUD)
- 基于protobuf创建web服务
- 基于protobuf创建grpc服务
- 基于protobuf创建grpc网关服务
- 基于protobuf创建grpc+http服务
如果对您有帮助给个star⭐,欢迎加入go sponge微信群交流,加微信(备注sponge
)进群。