SQL+RESTful開源GO腳手架工具ginbro(gin and gorm's brother) 詳解

dejavuzhou felix ginbro

安裝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.登錄界面

默認用戶名和密碼都是 adminvue

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.gomysql

gin 路由應用二進制化的前端代碼中間件以下:nginx

import "github.com/dejavuzhou/felix/staticbin" //導入felix ginbin 生成的二進制化包git

https://github.com/dejavuzhou/felix/blob/master/ssh2ws/ssh2ws.gogithub

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

相關文章
相關標籤/搜索