头图

sponge 是一个集成了自动生成代码web和微服务框架基础开发框架的golang生产力工具。sponge拥有丰富的生成代码命令,生成不同的功能代码可以组合成完整的服务(类似人为打散的海绵细胞可以自动重组成一个新的海绵)。代码解耦模块化设计,很容易构建出从开发到部署的完整工程项目,让你开发web或微服务项目轻而易举、事半功倍,golang也可以"低代码开发"。

如果开发只有简单CRUD api接口的web或微服务,不需要编写一行golang代码就可以编译并部署到服务器、docker、k8s上,完整的服务代码由sponge一键生成。

如果开发通用的web或微服务,除了定义数据表、在proto文件定义api接口、在生成的模板文件填写具体业务逻辑代码这三个部分需要人工编写代码,其他golang代码都由sponge生成。

项目地址:https://github.com/zhufuyi/sponge
使用文档:https://go-sponge.com/


生成代码框架

sponge主要基于SQLProtobuf两种方式生成代码,每种方式拥有生成不同功能代码。

生成代码的框架图:

sponge-framework


生成代码框架对应的UI界面:

sponge-ui


微服务框架

sponge生成的微服务代码框架如下图所示,这是典型的微服务分层结构,具有高性能,高扩展性,包含了常用的服务治理功能,可以很方便替换或添加自己的服务治理功能。

microservices-framework


主要功能

sponge包含丰富的组件(按需使用):

  • Web 框架 gin
  • RPC 框架 grpc
  • 配置解析 viper
  • 配置中心 nacos
  • 日志 zap
  • 数据库组件 gorm
  • 缓存组件 go-redis, ristretto]
  • 自动化api接口文档 swagger, protoc-gen-openapiv2
  • 鉴权 jwt
  • 校验 validator
  • 自适应限流
  • 自适应熔断
  • 链路跟踪 opentelemetry
  • 监控 prometheu, grafana
  • 服务注册与发现 etcd, consul, nacos
  • 自适应采集 profile
  • 资源统计 gopsutil
  • 代码质量检查 golangci-lint
  • 持续集成部署 CICD jenkins, docker, kubernetes


目录结构

生成的服务代码目录结构遵循 project-layout,代码目录结构如下所示:

.
├── api            # proto文件和生成的*pb.go目录
├── assets         # 其他与资源库一起使用的资产(图片、logo等)目录
├── cmd            # 程序入口目录
├── configs        # 配置文件的目录
├── deployments    # IaaS、PaaS、系统和容器协调部署的配置和模板目录
├── 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    # 外部帮助程序、分叉代码和其他第三方工具


完整的服务代码的鸡蛋模型

sponge生成代码过程中剥离了业务逻辑与非业务逻辑两大部分代码。例如把一个完整web服务代码看作一个鸡蛋,蛋壳表示web服务框架代码,蛋白和蛋黄都表示业务逻辑代码,蛋黄是业务逻辑的核心(需要人工编写的代码),例如定义mysql表、定义api接口、编写具体逻辑代码都属于蛋黄部分。蛋白是业务逻辑核心代码与web框架代码连接的桥梁(自动生成,不需要人工编写),例如根据proto文件生成的注册路由代码、handler方法函数代码、参数校验代码、错误码、swagger文档等都属于蛋白部分。

⓷基于protobuf创建的web服务代码的鸡蛋模型剖析图:

web-http-pb-anatomy

这是web服务代码鸡蛋模型,还有微服务(grpc)代码、grpc网关服务代码的鸡蛋模型在sponge文档中有介绍。


快速开始

安装sponge:

支持在windows、mac、linux环境下安装sponge,点击查看安装说明

安装完成sponge后,启动UI服务:

sponge run

在浏览器访问 http://localhost:24631,在UI页面上操作生成代码。


使用示例

简单示例

不包含具体业务逻辑代码。

完整项目示例



gvison
9 声望3 粉丝