1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        推薦三個(gè)實(shí)用的 Go 開(kāi)發(fā)工具

        共 9110字,需瀏覽 19分鐘

         ·

        2021-08-18 04:10

        孫悟空在花果山稱王的時(shí)候,特意去了一趟東海,在那里淘到了如意金箍棒。因?yàn)樯頌橐粋€(gè)山大王,怎么能沒(méi)有一件趁手的兵器呢?

        作為程序員的我們也一樣,除了我們的傍身武器 Ctrl C + V 之外,還要不停的補(bǔ)充我們的武器庫(kù)。不僅要把 Ctrl C + V 用的高級(jí),更要用的恰到好處。

        今天介紹三款小工具,分別可以將 jsonyamltable 轉(zhuǎn)成 Go 的 struct。下次再碰到這樣的轉(zhuǎn)換場(chǎng)景,再也不用皺眉撓頭了,一鍵輕松搞定。

        前兩個(gè)直接在線轉(zhuǎn)換,最后一個(gè)需要安裝一個(gè)庫(kù),但也很方便。

        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

        假設(shè)有這樣一張表:

        CREATE TABLE `prefix_user` (
          `Id` int(11NOT NULL AUTO_INCREMENT,
          `Email` varchar(32NOT NULL DEFAULT '' COMMENT '郵箱',
          `Password` varchar(32NOT NULL DEFAULT '' COMMENT '密碼',
          `CreatedAt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
          PRIMARY KEY (`Id`)
        ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶表'

        使用方式分兩種,分別是命令行調(diào)用和寫(xiě) Go 代碼:

        命令行調(diào)用

        1、下載對(duì)應(yīng)平臺(tái)的可執(zhí)行文件, 下載地址:https://github.com/gohouse/converter/releases

        2、命令行執(zhí)行:

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

        3、參數(shù)說(shuō)明:

        -dsn            string 數(shù)據(jù)庫(kù)dsn配置
        -enableJsonTag  bool 是否添加json的tag
        -file           string 保存路徑
        -packageName    string 包名
        -prefix         string 表前綴
        -realNameMethod string 結(jié)構(gòu)體對(duì)應(yīng)的表名
        -table          string 要遷移的表
        -tagKey         string tag的key

        Go 代碼調(diào)用

        安裝庫(kù):

        go get github.com/gohouse/converter

        代碼:

        package main

        import (
            "fmt"
            "github.com/gohouse/converter"
        )

        func main() {
            // 初始化
            t2t := converter.NewTable2Struct()
            // 個(gè)性化配置
            t2t.Config(&converter.T2tConfig{
                // 如果字段首字母本來(lái)就是大寫(xiě), 就不添加tag, 默認(rèn)false添加, true不添加
                RmTagIfUcFirsted: false,
                // tag的字段名字是否轉(zhuǎn)換為小寫(xiě), 如果本身有大寫(xiě)字母的話, 默認(rèn)false不轉(zhuǎn)
                TagToLower: false,
                // 字段首字母大寫(xiě)的同時(shí), 是否要把其他字母轉(zhuǎn)換為小寫(xiě),默認(rèn)false不轉(zhuǎn)換
                UcFirstOnly: false,
                //// 每個(gè)struct放入單獨(dú)的文件,默認(rèn)false,放入同一個(gè)文件(暫未提供)
                //SeperatFile: false,
            })
            // 開(kāi)始遷移轉(zhuǎn)換
            err := t2t.
                // 指定某個(gè)表,如果不指定,則默認(rèn)全部表都遷移
                Table("user").
                // 表前綴
                Prefix("prefix_").
                // 是否添加json tag
                EnableJsonTag(true).
                // 生成struct的包名(默認(rèn)為空的話, 則取名為: package model)
                PackageName("model").
                // tag字段的key值,默認(rèn)是orm
                TagKey("orm").
                // 是否添加結(jié)構(gòu)體方法獲取表名
                RealNameMethod("TableName").
                // 生成的結(jié)構(gòu)體保存路徑
                SavePath("/Users/fizz/go/src/github.com/gohouse/gupiao/model/model.go").
                // 數(shù)據(jù)庫(kù)dsn,這里可以使用 t2t.DB() 代替,參數(shù)為 *sql.DB 對(duì)象
                Dsn("root:root@tcp(localhost:3306)/test?charset=utf8").
                // 執(zhí)行
                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"
        }

        收藏吧!希望你用到的時(shí)候還能想起它。


        文章中的腦圖和源碼都上傳到了 GitHub,有需要的同學(xué)可自行下載。

        地址: https://github.com/yongxinz/gopher/tree/main/blog

        關(guān)注公眾號(hào) AlwaysBeta,回復(fù)「goebook」領(lǐng)取 Go 編程經(jīng)典書(shū)籍。

        Go 專欄文章列表:

        Go 專欄|函數(shù)那些事

        Go 專欄|流程控制,一網(wǎng)打盡

        Go 專欄|復(fù)合數(shù)據(jù)類型:字典 map 和 結(jié)構(gòu)體 struct

        Go 專欄|復(fù)合數(shù)據(jù)類型:數(shù)組和切片 slice

        瀏覽 49
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            成人里番精品一区二区 | 天天操天天曰 | 开心激情网五月天 | 91操午夜 | 黄色一级日逼片 | www逼 | 好日吊 | 又粗又长又硬视频 | 免费黄色视频观看 | 色婷婷AV久久久久久久 |