实用的Go语言开发工具及使用示例
作者:yongxinz 发布时间:2024-04-26 17:25:25
标签:Go语言,开发工具
前言
孙悟空在花果山称王的时候,特意去了一趟东海,在那里淘到了如意金箍棒。因为身为一个山大王,怎么能没有一件趁手的兵器呢?
作为程序员的我们也一样,除了我们的傍身武器 Ctrl C + V 之外,还要不停的补充我们的武器库。不仅要把 Ctrl C + V 用的高级,更要用的恰到好处。
今天介绍三款小工具,分别可以将 json
,yaml
和 table
转成 Go 的 struct
。下次再碰到这样的转换场景,再也不用皱眉挠头了,一键轻松搞定。
前两个直接在线转换,最后一个需要安装一个库,但也很方便。
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
假设有这样一张表:
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 代码调用
安装库:
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
来源:https://mp.weixin.qq.com/s/3GLMLhegB3wF5_62mpmePA


猜你喜欢
- $emit传入的事件名称只能使用小写,不能使用大写的驼峰规则命名如果修改后还是不行的话,就改用:this.$parent.Event (Ev
- 一. 连接池的原理首先, HTTP连接是基于TCP连接的, 与服务器之间进行HTTP通信, 本质就是与服务器之间建立了TCP连接后, 相互收
- sql server中如何判断表或者数据库的存在,但在实际使用中,需判断Status状态位:其中某些状态位可由用户使用 sp_dboptio
- 一:基础环境介绍:Centos:7.8(cat /etc/redhat-release查看版本号)Python:3.9.5(python -
- 修改闭包内使用的外部变量错误示例:# 定义一个外部函数def func_out(num1): # 定义一个内部函数
- 分页显示是页面常用技术,可用下列代码来实现:<%page=Request.QueryString("page&q
- 本文实例讲述了Python实现数通设备端口使用情况监控的方法。分享给大家供大家参考。具体如下:最近因工作需要,上面要求,每天需上报运维的几百
- 首先说登陆在config.inc.php文件中,有一个选项需要设置查找:$cfg['Servers'][$i]['a
- 前文学习:python数据类型: python数据结构:数据类型.python的输入输出: python数据结构输入输出及控制和异常.pyt
- 什么是修改?在SQL中的基本操作就是增删改查,查询语句不会对数据库中的数据进行修改。而其余的三种操作都会对数据库进行修改,不管是什么修改,我
- 守护进程主进程创建子进程目的是:主进程有一个任务需要并发执行,那开启子进程帮我并发执行任务主进程创建子进程,然后将该进程设置成守护自己的进程
- go协程上下文contextgolang的context 主要用来在 goroutine 之间传递上下文信息,包括:取消信号、超时时间、截止
- 前言字典为动词“to yield”给出了两个释义:产出和让步。对于 Python 生成器中的 yie
- 本文实例讲述了Python3写入文件常用方法。分享给大家供大家参考。具体如下:''''' Creat
- 使用conda安装requirement.txt的扩展包当你在GitHub上下载了代码时,可以看到有一个requirements.txt文件
- asp之家注:作为一个学习asp的爱好者,相信一定接触过session,我们经常使用session来作为会员登录的验证,当然也可以使用COO
- 本文实例讲述了Selenium基本用法。分享给大家供大家参考,具体如下:Selenium是一个用于Web应用程序测试的工具。Selenium
- 算法简介鸡群算法,缩写为CSO(Chicken Swarm Optimization),尽管具备所谓仿生学的背景,但实质上是粒子群算法的一个
- 这次做一个比较贴近我实际的东西:python分析作业提交情况。要求: 将服务器中交作业的学生(
- 作者认为最快的学习区块链的方式是自己创建一个,本文就跟随作者用Python来创建一个区块链。对数字货币的崛起感到新奇的我们,并且想知道其背后