<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
孫悟空在花果山稱王的時候,特意去了一趟東海,在那裡淘到了如意金箍棒。因為身為一個山大王,怎麼能沒有一件趁手的兵器呢?
作為程式設計師的我們也一樣,除了我們的傍身武器 Ctrl C + V 之外,還要不停的補充我們的武器庫。不僅要把 Ctrl C + V 用的高階,更要用的恰到好處。
今天介紹三款小工具,分別可以將 json
,yaml
和 table
轉成 Go 的 struct
。下次再碰到這樣的轉換場景,再也不用皺眉撓頭了,一鍵輕鬆搞定。
前兩個直接線上轉換,最後一個需要安裝一個庫,但也很方便。
地址: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"` }
地址: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"` }
地址https://github.com/gohouse/converter
假設有這樣一張表:
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='使用者表'
使用方式分兩種,分別是命令列呼叫和寫 Go 程式碼:
1、下載對應平臺的可執行檔案, 下載地址:
https://github.com/gohouse/converter/releases
2、命令列執行:
./table2struct-linux.v0.0.3.bin -file model.go -dsn xxx -table user
3、引數說明:
-dsn string 資料庫dsn設定 -enableJsonTag bool 是否新增json的tag -file string 儲存路徑 -packageName string 包名 -prefix string 表字首 -realNameMethod string 結構體對應的表名 -table string 要遷移的表 -tagKey string tag的key
安裝庫:
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的欄位名字是否轉換為小寫, 如果本身有大寫字母的話, 預設false不轉 TagToLower: false, // 欄位首字母大寫的同時, 是否要把其他字母轉換為小寫,預設false不轉換 UcFirstOnly: false, //// 每個struct放入單獨的檔案,預設false,放入同一個檔案(暫未提供) //SeperatFile: false, }) // 開始遷移轉換 err := t2t. // 指定某個表,如果不指定,則預設全部表都遷移 Table("user"). // 表字首 Prefix("prefix_"). // 是否新增json tag EnableJsonTag(true). // 生成struct的包名(預設為空的話, 則取名為: package model) PackageName("model"). // tag欄位的key值,預設是orm TagKey("orm"). // 是否新增結構體方法獲取表名 RealNameMethod("TableName"). // 生成的結構體儲存路徑 SavePath("/Users/fizz/go/src/github.com/gohouse/gupiao/model/model.go"). // 資料庫dsn,這裡可以使用 t2t.DB() 代替,引數為 *sql.DB 物件 Dsn("root:root@tcp(localhost:3306)/test?charset=utf8"). // 執行 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,有需要的同學可自行下載。
地址:https://github.com/yongxinz/gopher/tree/main/blog
以上就是實用的Go語言開發工具及使用範例的詳細內容,更多關於Go語言開發工具的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45