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

jjjjerk發表於2019-05-23

安裝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

ginrbo_00.png

2.填寫資料庫連線資訊

ginrbo_01.png

3.配置app使用者認證的表和欄位

ginrbo_02.png

4.配置app 包名稱,匯出目錄和監聽地址

ginrbo_03.png

5.生成go程式碼

ginrbo_04.png

6.下載程式碼或cd者到指定目錄

ginrbo_05.png

功能二:前端程式碼二進化,通過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

相關文章