SQL+RESTful开源GO脚手架工具ginbro(gin and gorm's brother) 详解
安装felix
git clone https://github.com/dejavuzhou/felix
cd felix
go mod download
go install
echo "添加 GOBIN 到 PATH环境变量"
echo "或者"
go get github.com/dejavuzhou/felix
echo "go build && ./felix -h"
What is Ginbro
- Gin脚手架工具:因为工作中非常多次的使用mysql数据库 + gin + GORM 来开发RESTful API程序,所以开发一个Go语言的RESTful APIs的脚手架工具
- Ginbro代码来源:Ginrbo的代码迭代自github.com/dejavuzhou/ginbro
- SPA二进制化工具:vuejs全家桶代码二进制化成go代码,编译的时候变成二进制,运行的时候直接加载到内存中,同时和gin API在一个域名下不需要再nginx中配置rewrite或者跨域,加快API访问速度
功能一:Gin+GORM_SQL RESTful 脚手架工具
工作原理
- 通过cobra 获取命令行参数
- 使用sql参数连接数据库
- 后去数据库表的名称和字段类型等数据库
- 数据库边的表名和字段信息,转换成 Swagger doc 规范字段 和 GORM 模型字段
- 使用标准库
text/template
生成swagger.yaml, GORM 模型文件, GIN handler 文件 ... - 使用
go fmt ./...
格式化代码 - 使用标准库
archive/zip
打包*.go config.toml ...
代码,提供zip文件下载(命令行模式没有)
支持数据库大多数SQL数据库
- mysql
- SQLite
- postgreSQL
- mssql(TODO:: sqlserver)
ginbro 生成app代码包含功能简介
- 每一张数据库表生成一个RESTful规范的资源(
GET<pagination>/POST/GET<one>/PATCH/DELETE
) - 支持API-json数据分页-和总数分页缓存,减少全表扫描
- 支持golang-内存单机缓存缓存
- 前端代码和API公用一个服务,减少跨域OPTION的请求时间和配置时间,同时完美支持前后端分离
- 开箱支持jwt-token认证和Bearer Token 路由中间件
- 开箱即用的logrus数据库
- 开箱即用的viper配置文件
- 开箱即用的swagger API 文档
- 开箱即用的定时任务系统
项目演示地址
felix sshw 网页UI演示地址 用户名和密码都是admin
生成swagger API交互文档地址 http://ginbro.mojotv.cn/swagger/
msql生成go代码地址
bili命令行演示视频地址
命令行参数详解
[root@ericzhou felix]# felix ginbro -h
generate a RESTful APIs app with gin and gorm for gophers
Usage:
felix ginbro [flags]
示例:
felix ginbro -a dev.wordpress.com:3306 -P go_package_name -n db_name -u db_username -p 'my_db_password' -d '~/thisDir'
Flags:
--authColumn string 使用bcrypt方式加密的用户表密码字段名称 (default "password")
--authTable string 认知登陆用户表名称 (default "users")
-a, --dbAddr string 数据库连接的地址 (default "127.0.0.1:3306")
-c, --dbChar string 数据库字符集 (default "utf8")
-n, --dbName string 数据库名称
-p, --dbPassword string 数据库密码 (default "password")
-t, --dbType string 数据库类型: mysql/postgres/mssql/sqlite (default "mysql")
-u, --dbUser string 数据库用户名 (default "root")
-d, --dir string golang代码输出的目录,默认是当前目录 (default ".")
-h, --help 帮助
-l, --listen string 生成go app 接口监听的地址 (default "127.0.0.1:5555")
--pkg string 生成go app 包名称(go version > 1.12) 生成go.mod文件, eg: ginbroSon
[root@ericzhou felix]#
web界面
对于那些喜欢使用命令行的同学,你们可以选择使用web界面来操作
git clone https://github.com/dejavuzhou/felix
cd felix
go mod download
go install
echo "添加 GOBIN 到 PATH环境变量"
echo "go build && ./felix -h"
echo 打开Web界面
felix sshw -h
felix sshw
echo "三秒钟之后会自动帮助你打开浏览器,如果如果你使用的windows或者mac系统"
1.登陆界面
默认用户名和密码都是 admin
2.填写数据库连接信息
3.配置app用户认证的表和字段
4.配置app 包名称,导出目录和监听地址
5.生成go代码
6.下载代码或cd者到指定目录
功能二:前端代码二进化,通过gin中间件整合到API服务
工作原理
- 遍历编译好的前端代码目录
- 使用
archive/zip
写入到bytes.buffer
中 - 格式化输出层 字符串常量的 go文件中
- 创建gin中间件,加载字符串处理,解析出文件
- 中间件path如果命中文件,这http 输出文件,否在交给下一个handler
参数说明
$ felix ginbin -h
示例: felix ginbin -s dist -p staticbin
Usage:
felix ginbin [flags]
Flags:
-c, --comment string 代码注释说明.
-d, --dest string 出输go代码到目录. (default ".")
-f, --force 是否覆盖输出. (default true)
-h, --help 帮助
-m, --mtime 是否修改文件时间戳.
-p, --package string 输出的包名称. (default "felixbin")
-s, --src string 前端静态文件的目录地址. (default "dist")
-t, --tags string go 语言的标签.
-z, --zip 是否zip压缩.
使用说明:生成的二进制化go文件
vuejs/dist 使用 felix ginbin
生成的go文件
https://github.com/dejavuzhou/felix/blob/master/staticbin/gin_static.go
gin 路由应用二进制化的前端代码中间件如下:
import "github.com/dejavuzhou/felix/staticbin" //导入felix ginbin 生成的二进制化包
https://github.com/dejavuzhou/felix/blob/master/ssh2ws/ssh2ws.go
r := gin.Default()
r.MaxMultipartMemory = 32 << 20
//sever static file in http's root path
binStaticMiddleware, err := staticbin.NewGinStaticBinMiddleware("/")
if err != nil {
return err
}
r.Use(binStaticMiddleware)
引用和代码仓库
dejavuzhou/felix Golang 工具集
felix ginbro 命令逻辑代码目录
前端代码二进制化成gin中间件代码
文章来源 MojoTech
golang后端
Go语言后端技术分享,希望 [链接]的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交...
推荐阅读
Go语言详解:HTTP断点续传多线程下载原理
原文地址:Go语言详解:HTTP断点续传多线程下载原理
mojotv_cn阅读 2.1k
再有谁说还不会数据库基础知识点!就把这个直接甩过去
死磕数据库系列(一):关系型数据库是如何工作的? 死磕数据库系列(二):数据库系统核心知识点详解 死磕数据库系列(三):关系型数据库设计理论与流程详解SQL语法基础基础模式定义了数据如何存储、存储什么样...
民工哥赞 2阅读 791
1024 开源首发 | SQL 审核工具 SQLE
在 2017 、2018 年和 2019 年的 10 月 24 日,爱可生开源社区出品了 MySQL 分布式中间件 DBLE 、数据复制产品 DTLE 和全局事务框架 TXLE 。时隔两年,这三款产品在社区积累了更多的设计经验和用户反馈,有更多的...
爱可生云数据库阅读 3.1k
HTAP 数据库如何实现?浅析开务数据库中的列存引擎
TP 与 AP 融合的 HTAP 数据库正成为业内的发展趋势。但由于大规模数据场景下 TP 与 AP 系统本身的复杂性,要在一套数据库系统中融合两种使用场景的功能并不容易。浪潮推出的 HTAP 开务数据库采用多模存储引擎的方...
KaiwuDB阅读 2.6k
分布式数据库--SQL优化之Plan Hint
Hint是嵌入SQL语句的对优化器进行提示的信息,是DBA进行SQL优化的常用手段。SQL语句经过优化器(规则优化(RBO)、代价优化(CBO)),通常会选择正确的查询路径,但是智者千虑,必有一失,有时优化器也会选择一个很差...
KaiwuDB赞 1阅读 672
深入解析 Raft 模块在开务数据库中的优化改造(下)
开务数据库是由浪潮开源的一款 NewSQL 分布式数据库,具备 HTAP 特性,拥有强一致、高可用的分布式架构。其中,开务数据库各方面的强一致性都依靠 Raft 算法实现。我们在上一篇文章中介绍了 Raft 一致性算法在分...
KaiwuDB赞 1阅读 1k
Clickhouse查询性能优化
虽然clickhouse在大数据量查询速度会比关系型数据库如mysql或者postrges快很多,但还是有很多地方需要去了解和配置,达到提供最低资源获取最大产出
龚正阳阅读 1.9k
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。