推薦三個實用的 Go 開發(fā)工具

原文鏈接: 推薦三個實用的 Go 開發(fā)工具

孫悟空在花果山稱王的時候劲腿,特意去了一趟東海蒙保,在那里淘到了如意金箍棒。因為身為一個山大王逆粹,怎么能沒有一件趁手的兵器呢?

作為程序員的我們也一樣炫惩,除了我們的傍身武器 Ctrl C + V 之外僻弹,還要不停的補充我們的武器庫。不僅要把 Ctrl C + V 用的高級他嚷,更要用的恰到好處蹋绽。

今天介紹三款小工具芭毙,分別可以將 jsonyamltable 轉(zhuǎn)成 Go 的 struct蟋字。下次再碰到這樣的轉(zhuǎn)換場景稿蹲,再也不用皺眉撓頭了,一鍵輕松搞定鹊奖。

前兩個直接在線轉(zhuǎn)換苛聘,最后一個需要安裝一個庫,但也很方便忠聚。

json-to-go

地址: https://mholt.github.io/json-to-go/

輸入:

[
    {
        "input_index": 0,
        "candidate_index": 0,
        "delivery_line_1": "1 N Rosedale St",
        "components": {
            "primary_number": "1",
            "street_predirection": "N",
            "street_name": "Rosedale",
            "street_suffix": "St",
            "city_name": "Baltimore",
            "state_abbreviation": "MD"
        }
    }
]

輸出:

type AutoGenerated []struct {
    InputIndex     int    `json:"input_index"`
    CandidateIndex int    `json:"candidate_index"`
    DeliveryLine1  string `json:"delivery_line_1"`
    Components     struct {
        PrimaryNumber      string `json:"primary_number"`
        StreetPredirection string `json:"street_predirection"`
        StreetName         string `json:"street_name"`
        StreetSuffix       string `json:"street_suffix"`
        CityName           string `json:"city_name"`
        StateAbbreviation  string `json:"state_abbreviation"`
    } `json:"components"`
}

yaml-to-go

地址: https://zhwt.github.io/yaml-to-go/

輸入:

image: golang:latest

before_script:
  - mkdir -p $GOPATH/src/$(dirname $REPO_NAME)
  - ln -svf $CI_PROJECT_DIR $GOPATH/src/$REPO_NAME
  - cd $GOPATH/src/$REPO_NAME

stages:
  - test
  - build
  - deploy

format:
  stage: test
  script:
    - go fmt $(go list ./... | grep -v /vendor/)
    - go vet $(go list ./... | grep -v /vendor/)
    - go test -race $(go list ./... | grep -v /vendor/)

輸出:

type AutoGenerated struct {
    Image        string   `yaml:"image"`
    BeforeScript []string `yaml:"before_script"`
    Stages       []string `yaml:"stages"`
    Format       struct {
        Stage  string   `yaml:"stage"`
        Script []string `yaml:"script"`
    } `yaml:"format"`
}

table-to-go

地址 https://github.com/gohouse/converter

假設(shè)有這樣一張表:

CREATE TABLE `prefix_user` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Email` varchar(32) NOT NULL DEFAULT '' COMMENT '郵箱',
  `Password` varchar(32) NOT NULL DEFAULT '' COMMENT '密碼',
  `CreatedAt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶表'

使用方式分兩種设哗,分別是命令行調(diào)用和寫 Go 代碼:

命令行調(diào)用

1、下載對應(yīng)平臺的可執(zhí)行文件两蟀, 下載地址:https://github.com/gohouse/converter/releases

2网梢、命令行執(zhí)行:

./table2struct-linux.v0.0.3.bin -file model.go -dsn xxx -table user

3、參數(shù)說明:

-dsn            string 數(shù)據(jù)庫dsn配置
-enableJsonTag  bool 是否添加json的tag
-file           string 保存路徑
-packageName    string 包名
-prefix         string 表前綴
-realNameMethod string 結(jié)構(gòu)體對應(yīng)的表名
-table          string 要遷移的表
-tagKey         string tag的key

Go 代碼調(diào)用

安裝庫:

go get github.com/gohouse/converter

代碼:

package main

import (
    "fmt"
    "github.com/gohouse/converter"
)

func main() {
    // 初始化
    t2t := converter.NewTable2Struct()
    // 個性化配置
    t2t.Config(&converter.T2tConfig{
        // 如果字段首字母本來就是大寫, 就不添加tag, 默認false添加, true不添加
        RmTagIfUcFirsted: false,
        // tag的字段名字是否轉(zhuǎn)換為小寫, 如果本身有大寫字母的話, 默認false不轉(zhuǎn)
        TagToLower: false,
        // 字段首字母大寫的同時, 是否要把其他字母轉(zhuǎn)換為小寫,默認false不轉(zhuǎn)換
        UcFirstOnly: false,
        //// 每個struct放入單獨的文件,默認false,放入同一個文件(暫未提供)
        //SeperatFile: false,
    })
    // 開始遷移轉(zhuǎn)換
    err := t2t.
        // 指定某個表,如果不指定,則默認全部表都遷移
        Table("user").
        // 表前綴
        Prefix("prefix_").
        // 是否添加json tag
        EnableJsonTag(true).
        // 生成struct的包名(默認為空的話, 則取名為: package model)
        PackageName("model").
        // tag字段的key值,默認是orm
        TagKey("orm").
        // 是否添加結(jié)構(gòu)體方法獲取表名
        RealNameMethod("TableName").
        // 生成的結(jié)構(gòu)體保存路徑
        SavePath("/Users/fizz/go/src/github.com/gohouse/gupiao/model/model.go").
        // 數(shù)據(jù)庫dsn,這里可以使用 t2t.DB() 代替,參數(shù)為 *sql.DB 對象
        Dsn("root:root@tcp(localhost:3306)/test?charset=utf8").
        // 執(zhí)行
        Run()
    
    fmt.Println(err)
}

輸出:

package model

import "time"

type User struct {
    Id         int     `json:"Id" orm:"Id"`
    Email      string  `json:"Email" orm:"Email"`           // 郵箱
    Password   string  `json:"Password" orm:"Password"`     // 密碼
    CreatedAt  string  `json:"CreatedAt" orm:"CreatedAt"`
}

func (*User) TableName() string {
    return "user"
}

收藏吧赂毯!希望你用到的時候還能想起它战虏。


文章中的腦圖和源碼都上傳到了 GitHub,有需要的同學(xué)可自行下載党涕。

地址: https://github.com/yongxinz/gopher/tree/main/blog

關(guān)注公眾號 AlwaysBeta烦感,回復(fù)「goebook」領(lǐng)取 Go 編程經(jīng)典書籍。

Go 專欄文章列表:

  1. Go 專欄|開發(fā)環(huán)境搭建以及開發(fā)工具 VS Code 配置
  2. Go 專欄|變量和常量的聲明與賦值
  3. Go 專欄|基礎(chǔ)數(shù)據(jù)類型:整數(shù)膛堤、浮點數(shù)手趣、復(fù)數(shù)、布爾值和字符串
  4. Go 專欄|復(fù)合數(shù)據(jù)類型:數(shù)組和切片 slice
  5. Go 專欄|復(fù)合數(shù)據(jù)類型:字典 map 和 結(jié)構(gòu)體 struct
  6. Go 專欄|流程控制肥荔,一網(wǎng)打盡
  7. Go 專欄|函數(shù)那些事
  8. Go 專欄|錯誤處理:defer绿渣,panic 和 recover
  9. Go 專欄|說說方法
  10. Go 專欄|接口 interface
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市燕耿,隨后出現(xiàn)的幾起案子中符,更是在濱河造成了極大的恐慌,老刑警劉巖誉帅,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舟茶,死亡現(xiàn)場離奇詭異,居然都是意外死亡堵第,警方通過查閱死者的電腦和手機吧凉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來踏志,“玉大人阀捅,你說我怎么就攤上這事≌胗啵” “怎么了饲鄙?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵凄诞,是天一觀的道長。 經(jīng)常有香客問我忍级,道長帆谍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任轴咱,我火速辦了婚禮汛蝙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘朴肺。我一直安慰自己窖剑,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布戈稿。 她就那樣靜靜地躺著西土,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鞍盗。 梳的紋絲不亂的頭發(fā)上需了,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音般甲,去河邊找鬼援所。 笑死,一個胖子當(dāng)著我的面吹牛欣除,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播挪略,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼历帚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了杠娱?” 一聲冷哼從身側(cè)響起挽牢,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎摊求,沒想到半個月后禽拔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡室叉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年睹栖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茧痕。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡野来,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出踪旷,到底是詐尸還是另有隱情曼氛,我是刑警寧澤豁辉,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站舀患,受9級特大地震影響徽级,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜聊浅,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一餐抢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狗超,春花似錦弹澎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至渗稍,卻和暖如春佩迟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背竿屹。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工报强, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拱燃。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓秉溉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碗誉。 傳聞我的和親對象是個殘疾皇子召嘶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容