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

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

今天介绍三款小工具,分别可以将 jsonyaml 和 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

推荐三个实用的 Go 开发工具的更多相关文章

  1. 值得拥有!精心推荐几款超实用的 CSS 开发工具

    当你开发一个网站或 Web 应用程序的时候,有合适的工具,绝对可以帮助您节省大量的时间.在这篇文章中,我为大家收集了超有用的 CSS 开发工具. 对于 Web 开发人员来说,找到有用的 CSS 开发工 ...

  2. 推荐15个月 Node.js 开发工具

    Node.js 越来月流行.这个基于 Google V8 引擎建立的平台, 用于方便地搭建响应速度快.易于扩展的网络应用.在本文中.我们列出了2015年最佳的15个 Node.js 开发工具.这些工具 ...

  3. 推荐近期15个 Node.js 开发工具

    近来Node.js 越来月流行了,这个基于Google V8 引擎建立的平台, 用于方便地搭建响应速度快.易于扩展的网络应用.在本文中,我们列出了2015年最佳的15个 Node.js 开发工具.这些 ...

  4. 【转】精心推荐几款超实用的 CSS 开发工具

    原文转自:http://www.html5cn.org/article-5741-1.html 摘要: 当你开发一个网站或 Web 应用程序的时候,有合适的工具,绝对可以帮助您节省大量的时间.在这篇文 ...

  5. 三步解决IDEA系列开发工具 RubyMine、IntelliJ IDEA 卡顿问题

    近日有小伙伴跟我反映说自己的开发工具很卡,有没有什么解决方案?答案是当然有啦!接下来看看怎么设置! 1.打开RubyMine,或IDEA,上边工具栏选择Help,下拉选择Edit Custom VM ...

  6. [Web Tools] 实用的Web开发工具

    模拟http请求:Postman https://www.getpostman.com 生成Json数据 http://www.json-generator.com/

  7. 推荐25款实用的 HTML5 前端框架和开发工具【下篇】

    快速,安全,响应式,互动和美丽,这些优点吸引更多的 Web 开发人员使用 HTML5.HTML5 有许多新的特性功能,允许开发人员和设计师创建应用程序和网站,带给用户桌面应用程序的速度,性能和体验. ...

  8. 推荐10款非常优秀的 HTML5 开发工具

      HTML5 发展如火如荼,随着各大浏览器对 HTML5 技术支持的不断完善以及 HTML5 技术的不断成熟,未来 HTML5 必将改变我们创建 Web 应用程序的方式.今天这篇文章向大家推荐10款 ...

  9. Mac iOS Mac Watch 应用和游戏编程开发工具推荐

    今日分享「iOS / Mac / Watch 应用和游戏开发工具」推荐,这期专题主要为iOS开发者推荐一些优秀的设计和开发工具,这些工具包含移动原型的设计.程序的开发等,可以大大提高开发的效率!专题会 ...

  10. mac 常用的开发工具

    http://www.oschina.net/news/53946/mac-dev-tools 要清楚的认识到,我们寻找的不是开始按钮,而是程序入口,任何一个操作系统,用户要做的事情并不是找到开始菜单 ...

随机推荐

  1. ZooKeeper 组件安装配置

    ZooKeeper 组件安装配置 下载和安装 ZooKeeper ZooKeeper最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/ 来获取,安装 Zoo ...

  2. 如何使用Postman调试HMS Core推送接口?

    HMS Core推送服务支持开发者使用HTTPS协议接入Push服务端.Postman是一款接口测试工具,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果.Postma ...

  3. KingbaseES V8R6 维护管理案例之---Kstudio在CentOS 7启动故障

    ​ 案例说明: 在CentOS 7上安装KingbaseES V8R6C006数据库后,启动Kstudio图形界面启动失败,gtk动态库加载失败,安装gtk相关动态库后,问题解决. 适用版本: Kin ...

  4. KingbaseES R6 集群主库网卡down测试案例

    数据库版本: test=# select version(); version ------------------------------------------------------------ ...

  5. 选择排序C语言版本

    算法思路,从头至尾扫描序列. 首先从第二个到最后,找出最小的一个元素,和第一个元素交换: 接着从第三个到最后,后面找出最小的一个元素,和第二个元素交换: 依次类推最终得到一个有序序列. void Se ...

  6. 跟羽夏学 Ghidra ——窗口

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...

  7. innodb_flush_log_at_trx_commit 和 sync_binlog 参数详 解

    "innodb_flush_log_at_trx_commit"和"sync_binlog"两个参数是控制 MySQL 磁盘写入策略以及数据安全性的关键参数.当 ...

  8. 修复 Elasticsearch 集群的常见错误和问题

    文章转载自:https://mp.weixin.qq.com/s/8nWV5b8bJyTLqSv62JdcAw 第一篇:Elasticsearch 磁盘使用率超过警戒水位线 从磁盘常见错误说下去 当客 ...

  9. 使用python读取京东pdf发票信息导出到excel表格中

    代码 #!/usr/bin/env python # -*- coding: utf-8 -*- """ pip install pdfminer3k pip insta ...

  10. Portainer 安装MySQL并开启远程访问

    进入到 Portainer 页面,选择左边的 Containers 选项,单击上方的 Add container 按钮转到如图所示的页面: 1.在 Name 一栏中输入容器名字: 2.在 Image ...