原文鏈接: 推薦三個實用的 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, 默認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 專欄文章列表:
- Go 專欄|開發(fā)環(huán)境搭建以及開發(fā)工具 VS Code 配置
- Go 專欄|變量和常量的聲明與賦值
- Go 專欄|基礎(chǔ)數(shù)據(jù)類型:整數(shù)膛堤、浮點數(shù)手趣、復(fù)數(shù)、布爾值和字符串
- Go 專欄|復(fù)合數(shù)據(jù)類型:數(shù)組和切片 slice
- Go 專欄|復(fù)合數(shù)據(jù)類型:字典 map 和 結(jié)構(gòu)體 struct
- Go 專欄|流程控制肥荔,一網(wǎng)打盡
- Go 專欄|函數(shù)那些事
- Go 專欄|錯誤處理:defer绿渣,panic 和 recover
- Go 專欄|說說方法
- Go 專欄|接口 interface