Sponge 是一个集成了 自动生成代码
、Gin和GRPC
的强大的开发框架。sponge拥有丰富的生成代码命令,生成不同的功能代码可以组合成完整的服务(类似人为打散的海绵细胞可以自动重组成一个新的海绵)。从开发、测试、api文档到部署一站式项目开发,大幅提高了开发效率和降低了开发难度,实现”低代码方式”进行开发项目。
如果开发只有CRUD api的web或微服务,不需要编写任何go代码就可以编译并部署到linux服务器、docker、k8s上,只需要连接到数据库(mysql、mongodb、postgresql、tidb、sqlite)就可以一键自动生成完整的后端服务go代码。
如果开发通用的web或微服务,只需聚焦在数据库定义表
、在proto文件定义api描述信息
、在生成的模板文件填写业务逻辑代码
三个核心部分,其他go代码都由sponge自动生成。
生成代码框架
sponge主要基于SQL
和Protobuf
两种方式生成代码,每种方式生成不同用途的代码。其中SQL
支持数据库mysql、mongodb、postgresql、tidb、sqlite。
生成代码的框架图
生成代码框架对应的UI界面
微服务框架
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
- 消息组件 rabbitmq
- 分布式事务管理器 dtm
- 自适应限流 ratelimit
- 自适应熔断 circuitbreaker
- 链路跟踪 opentelemetry
- 监控 prometheus, grafana
- 服务注册与发现 etcd, consul, nacos
- 自适应采集 profile
- 资源统计 gopsutil
- 代码质量检查 golangci-lint
- 持续集成部署 CICD jenkins, docker, kubernetes
目录结构
生成的服务代码目录结构遵循 project-layout,代码目录结构如下所示。支持的仓库类型有单体应用单体仓库(monolith)
、微服务多仓库(multi-repo)
、微服务单体仓库(mono-repo)
。
.
├── api # proto文件和生成的*pb.go目录
├── assets # 其他与资源库一起使用的资产(图片、logo等)目录
├── cmd # 程序入口目录
├── configs # 配置文件的目录
├── deployments # IaaS、PaaS、系统和容器协调部署的配置和模板目录
├── docs # 设计文档和界面文档目录
├── i(I)nternal # 业务逻辑代码目录,如果首字母是小写(internal),表示私有代码,如果首字母大写(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 # 外部帮助程序、分叉代码和其他第三方工具
快速开始
安装sponge
支持在windows、mac、linux环境下安装sponge,点击查看安装sponge说明。
启动UI服务
安装完成后,启动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开发项目的详细的操作、配置、部署说明,点击查看sponge开发文档。
使用示例
使用sponge创建服务示例
- 基于sql创建web服务(包括CRUD)
- 基于sql创建grpc服务(包括CRUD)
- 基于protobuf创建web服务
- 基于protobuf创建grpc服务
- 基于protobuf创建grpc网关服务
- 基于protobuf创建grpc+http服务
使用sponge开发完整项目示例
分布式事务示例
视频介绍
视频教程演示使用sponge v1.3.12版本,后续的版本增加了一些自动化功能、调整了一些UI界面和菜单,建议结合文档教程使用。
- 01 sponge的形成过程
- 02 sponge的框架介绍
- 03 一键生成完整的web服务代码
- 04 批量生成CRUD api代码到web服务
- 05 一键生成通用的web服务代码
- 06 批量生成任意api模板代码到web服务
- 07 一键生成完整的grpc服务代码
- 08 批量生成CRUD api代码到grpc服务
- 09 一键生成通用的grpc微服务代码
- 10 批量生成grpc api代码到grpc服务
- 11 grpc测试神器,简单便捷
- 12 一键生成grpc网关服务代码
- 13 十分钟搭建一个微服务集群示例
如果对您有帮助给个star⭐,欢迎加入go sponge微信群交流,加微信(备注sponge
)进群。