推荐三个实用的 Go 开发工具

简介: 今天介绍三款小工具,分别可以将 json,yaml 和 table 转成 Go 的 struct。下次再碰到这样的转换场景,再也不用皱眉挠头了,一键轻松搞定。

QQ图片20220423132559.png


孙悟空在花果山称王的时候,特意去了一趟东海,在那里淘到了如意金箍棒。因为身为一个山大王,怎么能没有一件趁手的兵器呢?


作为程序员的我们也一样,除了我们的傍身武器 Ctrl C + V 之外,还要不停的补充我们的武器库。不仅要把 Ctrl C + V 用的高级,更要用的恰到好处。


今天介绍三款小工具,分别可以将 jsonyamltable 转成 Go 的 struct。下次再碰到这样的转换场景,再也不用皱眉挠头了,一键轻松搞定。


前两个直接在线转换,最后一个需要安装一个库,但也很方便。


json-to-go


地址:mholt.github.io/json-to-go/


QQ图片20220423132753.png


输入:


[
  {
    "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/


QQ图片20220423132756.png


输入:


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


地址github.com/gohouse/con…


假设有这样一张表:


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不转换
    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,有需要的同学可自行下载。


地址:github.com/yongxinz/go…



目录
相关文章
|
10月前
|
负载均衡 Go 数据库
Go 语言基于 Go kit 开发 Web 项目
Go 语言基于 Go kit 开发 Web 项目
74 0
|
2月前
|
Go 开发工具
Go 语言开发工具
Go 语言开发工具
19 3
|
2月前
|
IDE Linux Go
|
2月前
|
IDE Linux Go
Go 语言开发工具LiteIDE
Go 语言开发工具LiteIDE
31 0
|
3月前
|
Java Go C#
开发语言漫谈-go
go的设计思路和python差不多,就是要降低入门难度,提高开发效率
|
3月前
|
编译器 Go 索引
go 开发入门篇之 go 语言
go 开发入门篇之 go 语言
|
Prometheus 监控 Cloud Native
Go:Promethus Eexporter开发,一篇带你玩妥它。
Go:Promethus Eexporter开发,一篇带你玩妥它。
|
测试技术 程序员 Go
Go 语言快速入门指南:Go 测试
编程不易,好的程序员也不敢保证程序无 Bug。因此,软件开发过程的一个重要部分是测试。为我们的代码编写测试是确保质量和提高可靠性的好方法。
|
Linux 测试技术 网络安全
嘿,Go开发时我是如何远程调试的
嘿,Go开发时我是如何远程调试的
1325 0
嘿,Go开发时我是如何远程调试的
|
开发框架 缓存 NoSQL
Go 日常开发常备第三方库和工具(下)
重点和大家分享下我们日常开发中所使用到的一些第三方库与工具。 这里我主要将这些库分为两类: 业务开发 基础工具开发