V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
not4jerk
V2EX  ›  Go 编程语言

SQL+RESTful API Go 脚手架工具

  •  
  •   not4jerk ·
    mojocn · 2019-05-23 15:38:44 +08:00 · 3697 次点击
    这是一个创建于 2017 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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"
    
    

    或者下载编译好的文件 https://github.com/dejavuzhou/felix/releases/tag/v0.2

    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-内存单机缓存
    • 支持gin autotls
    • 前端代码和 API 公用一个服务,减少跨域 OPTIONS 的请求时间和配置时间,同时完美支持前后端分离
    • 开箱支持 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

    6 条回复    2019-05-24 15:32:57 +08:00
    dabaibai
        1
    dabaibai  
       2019-05-23 20:06:10 +08:00
    后端要啥脚手架...
    not4jerk
        2
    not4jerk  
    OP
       2019-05-23 20:42:49 +08:00
    @dabaibai

    可以通过导入 sql 数据库连接 生成 go 项目的代码

    其实我这个开源代码 还包含 ssh 跳板机 ssh 命令行工具, ....
    dabaibai
        3
    dabaibai  
       2019-05-23 20:44:14 +08:00
    @not4jerk 哇 vue 在线 ssh 命令行工具吗? 这个好
    谢谢楼主
    not4jerk
        4
    not4jerk  
    OP
       2019-05-24 09:38:24 +08:00
    @dabaibai 提供命令行工具和 web UI(vuejs + xterm.js)
    wsseo
        5
    wsseo  
       2019-05-24 11:00:08 +08:00   ❤️ 1
    标记
    not4jerk
        6
    not4jerk  
    OP
       2019-05-24 15:32:57 +08:00
    @wsseo 感谢 不过现在有一个问题: go mod 中一个包第三方包版本有问题 https://github.com/ugorji/go/issues/299 导致 ginbro web ui 不能到达最后一步, 但是代码可以生成

    ```
    C:\ginbroRock4>go fmt ./...
    build ginbroSon: cannot load github.com/ugorji/go/codec: ambiguous import: found github.com/ugorji/go/codec in multiple modules:
    github.com/ugorji/go v1.1.4 (C:\Users\xxx\go\pkg\mod\github.com\ugorji\[email protected]\codec)
    github.com/ugorji/go/codec v0.0.0-20181209151446-772ced7fd4c2 (C:\Users\xx\go\pkg\mod\github.com\ugorji\go\[email protected]
    d4c2)

    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2855 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 13:57 · PVG 21:57 · LAX 05:57 · JFK 08:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.