Golang使用xorm逆向生成结构体 – MySQL
- 安装
go get github.com/go-xorm/cmd/xorm
go get github.com/go-xorm/xorm
- 修改源码
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[:])
}
- 创建一个项目test
- 编写脚本
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 "======================= 开始生成对应的机构体 ======================="
- 执行
./mac-xorm-sql-struct.sh 1 # 1 是版本