安装 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)