fuckdb Lite, 幫助你更快地生成go struct代碼

前言&背景

在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

Web 版

鏈接本地數據庫

若是你的數據庫在本地,那麼只須要執行 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 namestruct 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分鐘拿到你想要的代碼。

fuckdb Lite

原理

基於 cobra(github.com/spf13/cobra),核心代碼繼承web版。

安裝

聽取用戶反饋,安裝流程極簡化,Mac用戶能夠直接brew install 安裝

brew tap hantmac/tap && brew install fuckdb
複製代碼
  • Linux用戶: curl https://github.com/hantmac/fuckdb/releases/download/v0.2/fuckdb_linux.tar.gz 下載、解壓、安裝
  • windows用戶emmm, 就去GitHub的release手動下載吧

使用

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 generatefuckdb 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…


官方資訊*最新技術*獨家解讀
複製代碼

相關文章
相關標籤/搜索