zoukankan      html  css  js  c++  java
  • mysql表结构自动生成golang struct

    安装

    golang源码包: go get 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='用户表'

    golang代码简单用法

    package main
    import (
        "fmt"
        "github.com/gohouse/converter"
    )
    func main() {
        err := converter.NewTable2Struct().
            SavePath("/home/go/project/model/model.go").
            Dsn("root:root@tcp(localhost:3306)/test?charset=utf8").
            Run()
        fmt.Println(err)
    }

    golang代码详细用法示例

    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)
    }

    result

    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"
    }
  • 相关阅读:
    体验ASP.NET 2.0中的BuildProvider(转载)
    为什么要用非关系数据库?
    Inside ASP.NET 2.0即时编译系统(转载)
    文本信息检索(维基百科)
    通用数据压缩算法简介
    在HttpModule中使用gzip,deflate协议对aspx页面进行压缩
    NoSQL非关系型数据库
    fatal error C1001: INTERNAL COMPILER ERROR (compiler file 'msc1.cpp', line 1786)
    C++中的变量 Variables in C++
    Visual C++, pow(),error C2065: 'pow' : undeclared identifier
  • 原文地址:https://www.cnblogs.com/sunzhiqi/p/12975255.html
Copyright © 2011-2022 走看看