實用的Go語言開發(fā)工具及使用示例
前言
孫悟空在花果山稱王的時候,特意去了一趟東海,在那里淘到了如意金箍棒。因為身為一個山大王,怎么能沒有一件趁手的兵器呢?
作為程序員的我們也一樣,除了我們的傍身武器 Ctrl C + V 之外,還要不停的補充我們的武器庫。不僅要把 Ctrl C + V 用的高級,更要用的恰到好處。
今天介紹三款小工具,分別可以將 json
,yaml
和 table
轉(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,?默認(rèn)false添加,?true不添加 ????????RmTagIfUcFirsted:?false, ????????//?tag的字段名字是否轉(zhuǎn)換為小寫,?如果本身有大寫字母的話,?默認(rèn)false不轉(zhuǎn) ????????TagToLower:?false, ????????//?字段首字母大寫的同時,?是否要把其他字母轉(zhuǎn)換為小寫,默認(rèn)false不轉(zhuǎn)換 ????????UcFirstOnly:?false, ????????////?每個struct放入單獨的文件,默認(rèn)false,放入同一個文件(暫未提供) ????????//SeperatFile:?false, ????}) ????//?開始遷移轉(zhuǎn)換 ????err?:=?t2t. ????????//?指定某個表,如果不指定,則默認(rèn)全部表都遷移 ????????Table("user"). ????????//?表前綴 ????????Prefix("prefix_"). ????????//?是否添加json?tag ????????EnableJsonTag(true). ????????//?生成struct的包名(默認(rèn)為空的話,?則取名為:?package?model) ????????PackageName("model"). ????????//?tag字段的key值,默認(rèn)是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
以上就是實用的Go語言開發(fā)工具及使用示例的詳細(xì)內(nèi)容,更多關(guān)于Go語言開發(fā)工具的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go 庫bytes.Buffer和strings.Builder使用及性能對比
這篇文章主要為大家介紹了Go 庫bytes.Buffer和strings.Builder使用及性能對比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12xorm根據(jù)數(shù)據(jù)庫生成go model文件的操作
這篇文章主要介紹了xorm根據(jù)數(shù)據(jù)庫生成go model文件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12golang如何通過viper讀取config.yaml文件
這篇文章主要介紹了golang通過viper讀取config.yaml文件,圍繞golang讀取config.yaml文件的相關(guān)資料展開詳細(xì)內(nèi)容,需要的小伙伴可以參考一下2022-03-03golang中切片copy復(fù)制和等號復(fù)制的區(qū)別介紹
這篇文章主要介紹了golang中切片copy復(fù)制和等號復(fù)制的區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04GO Cobra Termui庫開發(fā)終端命令行小工具輕松上手
這篇文章主要為大家介紹了GO語言開發(fā)終端命令行小工具,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01