在golang的開發過程當中,當咱們使用orm的時候,經常須要將數據庫表對應到golang的一個struct,這些struct會攜帶orm對應的tag
,就像下面的struct定義同樣:mysql
type InsInfo struct {
Connections string `gorm:"column:connections"`
CPU int `gorm:"column:cpu"`
CreateTime time.Time `gorm:"column:create_time"`
Env int `gorm:"column:env"`
ID int64 `gorm:"column:id;primary_key"`
IP string `gorm:"column:ip"`
Organization string `gorm:"column:organization"`
Pass string `gorm:"column:pass"`
Port string `gorm:"column:port"`
RegionId string `gorm:"column:regionid"`
ServerIP string `gorm:"column:server_ip"`
Status int `gorm:"column:status"`
Type string `gorm:"column:type"`
UUID string `gorm:"column:uuid"`
}
複製代碼
這是gorm對應的數據庫表的struct映射,即便數據表的字段很少,若是是手動寫起來也是一些重複性的工做。像MySQL這種關係型數據庫,咱們通常會用orm去操做數據庫,因而就想mysql的數據表能不能來自動生成golang 的struct定義 ,減小重複性的開發工做(早點下班)。linux
調研了一下目前有一些工具,好比chrome插件SQL2Struct(一款根據sql語句自動生成golang結構體的chrome插件),感受用起來比較繁瑣,每次須要進入數據庫,執行SQL語句拿到建表語句copy到瀏覽器中,才能使用。在想能不能提供一個開箱即用的環境,提供web界面,咱們只須要填寫數據庫信息,就能夠一鍵生成對應的ORM的struct,因而就誕生了這個項目:github.com/hantmac/fuc…git
mysql有個自帶的數據庫information_schema
,有一張表COLUMNS
,它的字段包含數據庫名、表名、字段名、字段類型等,咱們能夠利用這個表的數據,把對應的表的字段信息讀取出來,而後再根據golang的語法規則,生成對應的struct。具體不詳細展開了,感興趣的能夠去看下源碼。github
若是你的數據庫在本地,那麼只須要執行 docker-compose up -d
, 訪問localhost:8000
,你就會獲得下面的界面:golang
若是你的數據庫在內網服務器上,你須要先修改後端接口的ip:port,而後從新build Docker鏡像,push到本身的鏡像倉庫,而後修改docker-compose.yaml,再執行docker-compose up -d
。修改的位置是:fuckdb/frontend/src/config/index.js
.web
let APIdb2struct
if(process.env.NODE_ENV === "development"){
APIdb2struct = "http://0.0.0.0:8000" //修改成部署服務器的ip
}else{
APIdb2struct = "http://0.0.0.0:8000" //修改成部署服務器的ip
}
export default {
APIdb2struct
}
複製代碼
只須要填入數據庫相關信息,以及你想獲得的golang代碼的package name
、struct name
,而後點擊生成,就能夠獲得gorm對應的結構體映射。sql
在你的項目項目中只要 Ctrl+C&Ctrl+V 便可。咱們知道golang的struct的tag有不少功能,這裏也提供了不少tag的可選項,好比json
,xml
等,後面會增長更多的tag可選項支持。chrome
web版的特點功能是數據庫信息緩存功能,可以記憶你以前填寫過的數據庫信息,省去了大量重複的操做,你不用再填寫繁瑣的數據庫名,表名,只需一鍵,就能夠獲得對應的代碼,配合附帶json-to-go插件(github.com/mholt/json-…),開發效率獲得極速提高。目前這個工具在咱們組內已經開始使用,反饋比較好,節省了不少重複的工做,尤爲是在開發的時候用到同一個庫的多張表,很快就能夠完成數據庫表->strcut的映射。docker
來看一段演示視頻。數據庫
前幾天有同窗找上門,說fuckdb的web版部署後沒法使用,解決了半天也沒能讓用戶部署起來,反饋過來仍是感受部署有些複雜。反思了一下,對於一個工具化的軟件,有些用戶並不想作一些複雜的部署流程或者不熟悉部署操做,可能就是想暫時使用一下,因此應該讓工具更加輕量化,更加開箱即用,因而連夜寫了一個fuckdb lite, 更容易上手使用,更方便的安裝流程,1分鐘拿到你想要的代碼。
基於 cobra(github.com/spf13/cobra),核心代碼繼承web版。
聽取用戶反饋,安裝流程極簡化,Mac用戶能夠直接brew install 安裝
brew tap hantmac/tap && brew install fuckdb
複製代碼
curl https://github.com/hantmac/fuckdb/releases/download/v0.2/fuckdb_linux.tar.gz
下載、解壓、安裝fuckdb --help
From mysql schema generate golang struct with gorm, json tag
Usage:
fuckdb [command]
Available Commands:
generate use `fuckdb generate` to generate fuckdb.json
go fuckdb go to generate golang struct with gorm and json tag
help Help about any command
Flags:
-h, --help help for fuckdb
Use "fuckdb [command] --help" for more information about a command.
複製代碼
目前提供了兩個主要命令,fuckdb generate
和 fuckdb go
,咱們依次來看。
fuckdb generate
複製代碼
生成一個存儲MySQL信息的fuckdb.json
文件, 編輯 fuckdb.json ,填寫你的MySQL信息,該文件可複用,簡單修改表名便可。
{
"db": {
"host": "localhost",
"port": 3306,
"password": "password",
"user": "root",
"table": "tableName",
"database": "example",
"packageName": "packageName",
"structName": "structName",
"jsonAnnotation": true,
"gormAnnotation": true
}
}
複製代碼
修改完文件後,就完成了準備工做,go go go!
執行
fuckdb go
複製代碼
Enjoy Your Code!
來看一段演示操做(說好一分鐘拿到代碼,毫不超1秒)
比以前的web版的安裝簡直方便了太多,媽媽不再用擔憂我加班啦。
ps: fuckdb.json文件必須在操做目錄下。
歡迎試用&反饋&Contribute。代碼地址:github.com/hantmac/fuc…
官方資訊*最新技術*獨家解讀
複製代碼