sponge:零代码一键生成高性能、高可靠的web服务项目,使用go开发web服务原来如此简单

zhufuyi · · 287 次点击 · 开始浏览    置顶

[sponge](https://github.com/zhufuyi/sponge) 是一个集成了自动生成代码、gin框架和一些常用流行库的生产力工具。sponge拥有丰富的生成代码命令,生成不同的功能代码可以组合成完整的服务(类似人为打散的海绵细胞可以自动重组成一个新的海绵)。代码解耦模块化设计,很容易构建出从开发到部署的完整工程项目,让你开发web服务项目轻而易举、事半功倍,使用go也可以"低代码开发"。 Github地址: [https://github.com/zhufuyi/sponge](https://github.com/zhufuyi/sponge) <br> ### 特点 - **使用简单**:使用UI界面操作,简单易用。 - **web框架**:内置了 Gin 框架和常用的中间件(日志、request_id、jwt鉴权、限流、熔断、链路跟踪、指标采集等) - **自动生成代码**:根据sql或protobuf和参数生成不同功能代码,例如生成web服务代码、handler(CRUD)代码、dao(CRUD)代码、model代码、redis缓存代码等。 - **代码解耦可扩展**:所有生成的代码都可以无缝衔接,不需要手动调整代码,支持自动合并新增模板代码,实现api接口"低代码开发"。 - **高可靠**:服务代码解耦模块化设计,代码经过严格的测试,并遵循良好的编码规范。 - **高性能**:在单台服务器中的实际业务中压测获取数据api接口轻松过万qps。 - **部署简单**:支持一键部署到服务器、docker、k8s上。 <br> ### 优势 - **提高开发效率**:通过生成代码来提高开发效率,省去大量手写代码的时间。 - **降低开发成本**:集成了 gin 、gorm、go-redis 等流行库和生成代码功能,只需专注编写业务逻辑代码,可以快速开发高性能高可靠 web 服务,降低开发成本。 - **提高开发质量**:开发项目简单化、标准化,生成的代码包括了测试用例。 <br> ### 功能 sponge包含丰富的组件(按需使用): - Web 框架 [gin](https://github.com/gin-gonic/gin) - 配置解析 [viper](https://github.com/spf13/viper) - 配置中心 [nacos](https://github.com/alibaba/nacos) - 日志 [zap](https://github.com/uber-go/zap) - 数据库组件 [gorm](https://github.com/go-gorm/gorm) - 缓存组件 [go-redis](https://github.com/go-redis/redis), [ristretto](https://github.com/dgraph-io/ristretto) - 自动化api接口文档 [swagger](https://github.com/swaggo/swag), [protoc-gen-openapiv2](https://github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2) - 鉴权 [jwt](https://github.com/golang-jwt/jwt) - 校验 [validator](https://github.com/go-playground/validator) - 消息组件 [rabbitmq](https://github.com/rabbitmq/amqp091-go) - 分布式事务管理器 [dtm](https://github.com/dtm-labs/dtm) - 自适应限流 [ratelimit](https://github.com/zhufuyi/sponge/tree/main/pkg/shield/ratelimit) - 自适应熔断 [circuitbreaker](https://github.com/zhufuyi/sponge/tree/main/pkg/shield/circuitbreaker) - 链路跟踪 [opentelemetry](https://github.com/open-telemetry/opentelemetry-go) - 监控 [prometheus](https://github.com/prometheus/client_golang/prometheus), [grafana](https://github.com/grafana/grafana) - 服务注册与发现 [etcd](https://github.com/etcd-io/etcd), [consul](https://github.com/hashicorp/consul), [nacos](https://github.com/alibaba/nacos) - 自适应采集 [profile](https://go.dev/blog/pprof) - 资源统计 [gopsutil](https://github.com/shirou/gopsutil) - 代码质量检查 [golangci-lint](https://github.com/golangci/golangci-lint) - 持续集成部署 CICD [jenkins](https://github.com/jenkinsci/jenkins), [docker](https://www.docker.com/), [kubernetes](https://github.com/kubernetes/kubernetes) <br> ### 目录结构 生成的服务代码目录结构遵循 [project-layout](https://github.com/golang-standards/project-layout),代码目录结构如下所示: ```bash . ├── 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等 │ └── types # http的请求和响应类型目录 ├── pkg # 外部应用程序可以使用的库目录 ├── scripts # 用于执行各种构建、安装、分析等操作的脚本目录 ├── test # 额外的外部测试程序和测试数据 └── third_party # 外部帮助程序、分叉代码和其他第三方工具 ``` <br> ### 快速开始 #### 安装sponge 支持在windows、mac、linux、docker环境下安装sponge,点击查看[安装sponge说明](https://github.com/zhufuyi/sponge/blob/main/assets/install-cn.md)。 #### 启动UI服务 安装完成后,启动sponge UI服务: ```bash sponge run ``` 在本地浏览器访问 `http://localhost:24631`,进入sponge的UI界面,点击左边菜单栏【SQL】--> 【创建web服务】,填写`mysql dsn地址`,点击`获取表名`,然后选择表名(可多选),接着填写其他参数,鼠标放在问号`?`位置查看参数说明,填写完参数后,点击按钮`下载代码`生成web服务完整项目代码,如下图所示: ![web-http.png](https://static.golangjob.cn/240125/aef06c21ff1b9205d86d049affb11e2e.png) 解压代码,打开终端,切换到代码目录,执行命令: ```bash # 生成swagger文档 make docs # 编译和运行服务 make run ``` 在浏览器打开 [http://localhost:8080/swagger/index.html](http://localhost:8080/swagger/index.html),在页面上进行增删改查、自定义条件分页查询的api接口测试,如下图所示: ![web-http-swagger.png](https://static.golangjob.cn/240125/5cc264e3451f930b52e52c185e6d0e40.png) 就这样在UI界面生成代码和几行命令就完成了一个简单的web服务开发,随着业务增加,需要添加更多mysql表的增删改查接口,在sponge的UI界面,点击左边菜单栏【Public】--> 【生成handler CRUD代码】,填写参数,然后点击按钮`下载代码`。 ![web-http-handler.png](https://static.golangjob.cn/240126/af5cd441bcd4cb87a4347b83f6c43dd5.png) 解压代码,把internal目录移动到web服务目录代码中,然后执行同样的命令: ```bash # 生成swagger文档 make docs # 编译和运行服务 make run ``` 接着在浏览器打开 [http://localhost:8080/swagger/index.html](http://localhost:8080/swagger/index.html)进行新增的api接口测试。 <br> ### sponge开发文档 更多使用sponge开发web项目的详情,点击查看[sponge开发文档](https://go-sponge.com/zh-cn/web-development-mysql)。 <br> ### 使用示例 - [web-gin-CRUD](https://github.com/zhufuyi/sponge_examples/tree/main/1_web-gin-CRUD) - [web-gin-protobuf](https://github.com/zhufuyi/sponge_examples/tree/main/3_web-gin-protobuf) <br> ### 视频教程 - [一键生成web服务完整项目代码](https://www.bilibili.com/video/BV1RY411k7SE/) - [批量生成CRUD接口代码到web服务](https://www.bilibili.com/video/BV1AY411C7J7/) - [一键生成通用的web服务项目代码](https://www.bilibili.com/video/BV1CX4y1D7xj/) - [批量生成任意API接口代码到web服务](https://www.bilibili.com/video/BV1P54y1g7J9/) <br> ### 结语 sponge是一个让开发者轻松快速开发web应用的好帮手,通过自动生成代码减少人工编写大量代码,让开发者只需专注编写业务逻辑代码,甚至实现零代码开发,极大提高了开发效率和降低了开发项目周期。开发者使用sponge在不同业务开发的web服务已在生产环境中稳定运行,如果你正在寻找高效率开发web服务框架,sponge是一个不错的选择。 <br> <br>

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

287 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传