脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - 实用的Go语言开发工具及使用示例

实用的Go语言开发工具及使用示例

2022-10-20 11:59yongxinz Golang

这篇文章主要为大家介绍了实用的Go语言开发工具及使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

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

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

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

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

json-to-go

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

实用的Go语言开发工具及使用示例

输入:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[
    {
        "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"
        }
    }
]

输出:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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/

实用的Go语言开发工具及使用示例

输入:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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/)

输出:

?
1
2
3
4
5
6
7
8
9
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

假设有这样一张表:

?
1
2
3
4
5
6
7
CREATE TABLE `prefix_user` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Email` varchar(32) NOT NULL DEFAULT '' COMMENT '邮箱',
  `Passwordvarchar(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、命令行执行:

?
1
./table2struct-linux.v0.0.3.bin -file model.go -dsn xxx -table user

3、参数说明:

?
1
2
3
4
5
6
7
8
-dsn            string 数据库dsn配置
-enableJsonTag  bool 是否添加json的tag
-file           string 保存路径
-packageName    string 包名
-prefix         string 表前缀
-realNameMethod string 结构体对应的表名
-table          string 要迁移的表
-tagKey         string tag的key

Go 代码调用

安装库:

?
1
go get github.com/gohouse/converter

代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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)
}

输出:

?
1
2
3
4
5
6
7
8
9
10
11
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语言开发工具的资料请关注服务器之家其它相关文章!

原文链接:https://mp.weixin.qq.com/s/3GLMLhegB3wF5_62mpmePA

延伸 · 阅读

精彩推荐
  • GolangGo工程化如何在整洁架构中使用事务?

    Go工程化如何在整洁架构中使用事务?

    事务的能力是在 repo 上提供的,所以我们需要在 repo 层提供一个事务接口,然后在 usecase 中进行调用,保证是事务执行的就行。...

    mohuishou11242021-12-28
  • GolangGo语言线程安全之互斥锁与读写锁

    Go语言线程安全之互斥锁与读写锁

    这篇文章主要介绍了Go语言线程安全之互斥锁与读写锁,互斥锁是为了并发的安全,在多个goroutine共同工作的时候,对于共享的数据十分不安全,而读写锁效率革...

    酷尔。4042022-02-25
  • GolangGo中http超时问题的排查及解决方法

    Go中http超时问题的排查及解决方法

    这篇文章主要介绍了Go中http超时问题的排查及解决方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 ...

    蘑菇先生5532020-05-29
  • Golanggo语言在请求http时加入自定义http header的方法

    go语言在请求http时加入自定义http header的方法

    这篇文章主要介绍了go语言在请求http时加入自定义http header的方法,实例分析了Go语言http请求的原理与操作技巧,需要的朋友可以参考下 ...

    令狐不聪8782020-04-22
  • GolangGo 加密解密算法小结

    Go 加密解密算法小结

    加密解密在实际开发中应用比较广泛,常见的加解密分为三种,本文就详细的介绍一下Go 加密解密算法,具有一定的参考价值,感兴趣的可以了解一下...

    无风的雨7582022-08-31
  • Golanggolang select 机制和超时问题

    golang select 机制和超时问题

    golang 中的协程使用非常方便,但是协程什么时候结束是一个控制问题,可以用 select 配合使用,这篇文章主要介绍了golang select 机制和超时问题,需要的朋友...

    拾荒志6372022-06-26
  • GolangGolang开发命令行之flag包的使用方法

    Golang开发命令行之flag包的使用方法

    这篇文章主要介绍Golang开发命令行及flag包的使用方法,日常命令行操作,相对应的众多命令行工具是提高生产力的必备工具,本文围绕该内容展开话题,需...

    山山仙人博客6722021-11-23
  • GolangGo语言判断文件或文件夹是否存在的方法

    Go语言判断文件或文件夹是否存在的方法

    这篇文章主要介绍了Go语言判断文件或文件夹是否存在的方法,结合具体实例形式对比分析了Go语言针对文件与目录判断的操作技巧与相关注意事项,需要的朋...

    phpgo5772020-05-06