乐趣区

SQLRESTful开源GO脚手架工具ginbrogin-and-gorms-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 脚手架工具

工作原理

  1. 通过 cobra 获取命令行参数
  2. 使用 sql 参数连接数据库
  3. 后去数据库表的名称和字段类型等数据库
  4. 数据库边的表名和字段信息, 转换成 Swagger doc 规范字段 和 GORM 模型字段
  5. 使用标准库 text/template 生成 swagger.yaml, GORM 模型文件, GIN handler 文件 …
  6. 使用 go fmt ./... 格式化代码
  7. 使用标准库 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 服务

工作原理

  1. 遍历编译好的前端代码目录
  2. 使用 archive/zip 写入到 bytes.buffer
  3. 格式化输出层 字符串常量的 go 文件中
  4. 创建 gin 中间件, 加载字符串处理, 解析出文件
  5. 中间件 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

退出移动版