Golang使用xorm逆向生成结构体 – MySQL

作者: 太阳上的雨天 分类: Go 发布时间: 2022-06-20 11:35
  1. 安装
go get github.com/go-xorm/cmd/xorm
go get github.com/go-xorm/xorm
  1. 修改源码
cd %GOPATH/pkg/mod/github.com/go-xorm/cmd/xorm@v0.0.0-20190426080617-f87981e709a1/templates/goxorm

sudo vim config

genJson=1  # 改为1

cd %GOPATH/pkg/mod/github.com/go-xorm/cmd/xorm@v0.0.0-20190426080617-f87981e709a1

sudo vim go.go

    /*if genJson {
        if include(ignoreColumnsJSON, col.Name) {
            tags = append(tags, "json:\"-\"")
        } else {
            tags = append(tags, "json:\""+col.Name+"\"")
        }
    }
    if len(res) > 0 {
        tags = append(tags, "xorm:\""+strings.Join(res, " ")+"\"")
    }
    if len(tags) > 0 {
        return "`" + strings.Join(tags, " ") + "`"
    } else {
        return ""
    }*/

    if genJson {                                                                        
        if include(ignoreColumnsJSON, col.Name) {                                       
            tags = append(tags, "json:\"-\"")                                           
        } else {                                                                        
            tags = append(tags, "json:\""+transfer(col.Name)+"\"")                    

        }                                                                               
    }                                                                                   
    if len(res) > 0 {                                                                    
        tags = append(tags, "json:\""+transfer(col.Name)+"\"")                            
    }                                                                                   
    if len(tags) > 0 {                                                                   
        return "`" + strings.Join(tags, " ") +  "`" + "  " + "//" + " "+ strings.Join(res, " ")  
    } else {                                                                            
        return ""                                                                     
    }       
}

func transfer(s string) string {                                            
    data := make([]byte, 0, len(s))                                         
    j := false                                                              
    k := false                                                              
    num := len(s) - 1                                                       
    for i := 0; i <= num; i++ {                                              
        d := s[i]                                                           
        if k == false && d >= 'A' && d <= 'Z' {                               
            k = true                                                        
        }                                                                   
        if d >= 'a' && d <= 'z' && (j || k == false) {                        
            if i != 0 {                                                     
                d = d - 32                                                  
            }                                                               
            j = false                                                       
            k = true                                                        
        }                                                                   
        if k && d == '_' && num > i && s[i+1] >= 'a' && s[i+1] <= 'z' {      
            j = true                                                        
            continue                                                        
        }                                                                   
        data = append(data, d)                                              
    }                                                                       
    return string(data[:])                                                  
}                       
  1. 创建一个项目test
  2. 编写脚本

Mac:

#!/bin/bash

host=ip
port=3306
username=root
password=密码
database=数据库名
charset=utf8mb4

echo "=======================  开始生成对应的机构体  ======================="

xorm reverse mysql $username:$password@($host:$port)/$database?charset=$charset %GOPATH%\pkg\mod\github.com\go-xorm\cmd\xorm@v0.0.0-20190426080617-f87981e709a1\templates\go .\model\v$1

echo "=======================  开始生成对应的机构体  ======================="

Win:

#!/bin/bash

host=ip
port=3306
username=root
password=密码
database=数据库名
charset=utf8mb4

echo "=======================  开始生成对应的机构体  ======================="

xorm reverse mysql $username:$password@($host:$port)/$database?charset=$charset %GOPATH%\pkg\mod\github.com\go-xorm\cmd\xorm@v0.0.0-20190426080617-f87981e709a1\templates\go .\model\v$1

echo "=======================  开始生成对应的机构体  ======================="
  1. 执行
./mac-xorm-sql-struct.sh 1  # 1 是版本

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注