作为程序员的我们也一样,除了我们的傍身武器 Ctrl C + V 之外,还要不停的补充我们的武器库。不仅要把 Ctrl C + V 用的高级,更要用的恰到好处。
今天介绍三款小工具,分别可以将 json,yaml 和 table 转成 Go 的 struct。下次再碰到这样的转换场景,再也不用皱眉挠头了,一键轻松搞定。
前两个直接在线转换,最后一个需要安装一个库,但也很方便。
json-to-go
地址: 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
地址: zhwt.github.io/yaml-to-go/
输入:
image: golang:latest
before_script:
-
mkdir -p (dirname $REPO_NAME)
-
ln -svf GOPATH/src/$REPO_NAME
-
cd 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
假设有这样一张表:
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、下载对应平台的可执行文件, 下载地址:github.com/gohouse/con…
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 代码调用
安装库:
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不转换
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新