17 KiB
English | 简体中文
sponge 是一个强大且易用的 Go
开发框架,其核心理念是通过解析 SQL
、Protobuf
、JSON
文件逆向生成模块化的代码,这些模块代码可灵活组合成多种类型的完整后端服务。sponge 采用模块化架构并深度集成 AI 助手,显著提升开发效率、降低技术门槛,以"低代码"方式轻松构建高性能、高可用的后端服务体系。
适用场景
sponge 适用于快速构建多种类型的高性能后端服务,适用场景如下:
- 开发企业内部 API 服务。
- 快速构建微服务 (Microservices)。
- 搭建后台管理系统 API。
- 构建 gRPC 服务进行服务间通信。
- 作为 Go 初学者或团队学习 Go 项目结构和最佳实践的起点。
- 需要提高开发效率、统一开发规范的团队。
- 云原生开发。
此外,开发者还可以通过自定义模板,生成满足业务需求的各类代码。
主要特点
-
一键生成完整后端服务代码
对于仅需CRUD API
的Web
或gRPC
服务,无需编写任何Go
代码。只需连接数据库(如MySQL
、MongoDB
、PostgreSQL
、SQLite
),即可一键生成完整后端服务代码,并轻松部署到 Linux 服务器、Docker 或 Kubernetes 上。 -
高效开发通用服务
开发通用的Web
、gRPC
、HTTP+gRPC
或gRPC Gateway
服务,只需专注于以下三部分:- 数据库表的定义;
- 在 Protobuf 文件中定义 API 描述信息;
- 在生成的模板中,使用内置AI助手或人工编写业务逻辑代码。
服务的框架代码和 CRUD API 代码均由 sponge 自动生成。
-
支持自定义模板,灵活扩展
sponge 支持通过自定义模板生成项目所需的多种代码类型,不局限于Go
语言。例如:- 后端代码;
- 前端代码;
- 配置文件;
- 测试代码;
- 构建和部署脚本等。
-
在页面生成代码,简单易用
sponge 提供在页面生成代码,避免了复杂的命令行操作,只需在页面上简单的填写参数即可一键生成代码。 -
与 AI 助手协同开发,形成开发闭环
sponge 与 内置的 AI 助手(DeepSeek、ChatGPT、Gemini)深度融合,形成一套完整的高效开发解决方案:- sponge:负责基础设施代码生成(服务框架、CRUD API 接口、自定义 API 接口代码(缺少业务逻辑)等)。
- AI助手:专注业务逻辑实现(表结构 DDL 设计、自定义 API 接口定义、业务逻辑实现代码)。
快速开始
-
安装 sponge
支持在 windows、mac、linux、docker 环境下安装 sponge,点击查看 安装 sponge 说明。
-
打开生成代码 UI 页面
安装完成后,执行命令打开 sponge UI 页面:
sponge run
在本地浏览器访问
http://localhost:24631
,在页面上操作生成代码,如下图所示:如果想要在跨主机的浏览器上访问,启动UI时需要指定宿主机ip或域名,示例
sponge run -a http://your_host_ip:24631
。
组件
sponge 内置了丰富的组件(按需使用):
组件 | 使用示例 |
---|---|
Web 框架 gin | gin 示例 gin 中间件示例 |
RPC 框架 gRPC | gRPC 示例 gRPC 拦截器示例 |
配置解析 viper | 示例 |
日志 zap | 示例 |
ORM 框架 gorm, mongo-go-driver | gorm 示例 mongodb 示例 |
缓存 go-redis, ristretto | go-redis 示例 ristretto 示例 |
自动化api文档 swagger, protoc-gen-openapiv2 | - |
鉴权 jwt | jwt 示例 gin 示例 gRPC 示例 |
校验 validator, protoc-gen-validate | validator 示例 protoc-gen-validate 示例 |
Websocket gorilla/websocket | 示例 |
定时任务 cron | 示例 |
消息队列 rabbitmq, kafka | rabbitmq 示例 kafka 示例 |
分布式事务管理器 dtm | dtm 服务发现示例 使用 dtm 秒杀抢购示例 |
分布式锁 dlock | 示例 |
自适应限流 ratelimit | gin 示例 gRPC 示例 |
自适应熔断 circuitbreaker | gin 示例 gRPC 示例 |
链路追踪 opentelemetry | gin 示例 gRPC 示例 跨服务链路追踪示例 |
监控 prometheus, grafana | gin 示例 gRPC 示例 web 和 gRPC 监控示例 |
服务注册与发现 etcd, consul, nacos | 服务注册示例 服务发现示例 |
自适应采集 profile | 示例 |
资源统计 gopsutil | 示例 |
配置中心 nacos | 示例 |
代码质量检查 golangci-lint | - |
持续集成部署 CI/CD kubernetes, docker, jenkins | 示例 |
生成项目业务架构图 spograph | 示例 |
生成自定义代码 go template | json 示例 sql 示例 protobuf 示例 |
AI助手 DeepSeek, ChatGPT, Gemini | 示例 |
代码生成引擎
sponge 提供强大的代码生成能力,支持基于内置模板
和自定义模板
两种方式快速生成项目所需代码,同时集成AI 助手
辅助生成业务逻辑代码。
- sponge 基于内置模板生成代码框架,如下图所示:
- sponge 基于自定义模板生成代码框架,如下图所示:
- sponge 基于函数及注释生成业务逻辑代码框架,如下图所示:
微服务框架
sponge 是一个现代化的 Go 微服务框架,它采用典型的微服务分层架构,内置了丰富的服务治理功能,帮助开发者快速构建和维护复杂的微服务系统,框架结构如下图所示:
创建的 HTTP 和 gRPC 服务代码的性能测试: 50个并发,总共100万个请求。
点击查看测试代码。
sponge 开发指南
欢迎查阅 Sponge 开发项目的完整技术文档,该文档详尽涵盖了代码生成、开发流程、系统配置及部署方案等核心内容。
目录结构
sponge 创建的服务代码目录结构遵循 project-layout。
sponge 支持创建 单体应用单体仓库(monolith)
、微服务多仓库(multi-repo)
、微服务单体仓库(mono-repo)
三种类型的项目代码结构。
- 创建
单体应用单体仓库(monolith)
或微服务多仓库(multi-repo)
代码目录结构如下:
.
├── api # protobuf文件和生成的*pb.go目录
├── assets # 其他与资源库一起使用的资产(图片、logo等)目录
├── cmd # 程序入口目录
├── configs # 配置文件的目录
├── deployments # 裸机、docker、k8s部署脚本目录
├── docs # 设计文档和界面文档目录
├── internal # 项目内部代码目录
│ ├── cache # 基于业务包装的缓存目录
│ ├── config # Go结构的配置文件目录
│ ├── dao # 数据访问目录
│ ├── database # 数据库目录
│ ├── 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 模块依赖项的密钥和校验和文件
代码示例
sponge 创建服务代码示例
- 基于sql创建web服务(包括CRUD)
- 基于sql创建grpc服务(包括CRUD)
- 基于protobuf创建web服务
- 基于protobuf创建grpc服务
- 基于protobuf创建grpc网关服务
- 基于protobuf创建grpc+http服务
分布式事务示例
sponge+AI 助手协同开发示例
sponge 开发项目示例
如果对您有帮助给个star⭐,欢迎加入go sponge微信群交流,加微信(备注sponge
)进群。
