1 Star 0 Fork 1

go-genie/sqlx

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
model_generator.go 1.95 KB
一键复制 编辑 原始数据 按行查看 历史
文兄 提交于 2025-06-17 16:11 +08:00 . init
package generator
import (
"gitee.com/go-genie/codegen"
"gitee.com/go-genie/sqlx/builder"
"os"
"path"
"strings"
)
func (m *Model) Generator() error {
cwd, _ := os.Getwd()
file := codegen.NewFile("models", path.Join(cwd, "pkg", "models", codegen.LowerSnakeCase(m.TypeName.Name()))+".go")
snippets := make([]*codegen.SnippetField, 0)
comments := []string{m.TypeName.Name()}
fieldCover := func(arr []string) []string {
newArr := make([]string, len(arr))
for i, v := range arr {
newArr[i] = codegen.LowerCamelCase(v)[1:]
}
return newArr
}
for _, item := range m.StructFields {
lastDotIndex := strings.LastIndex(item.Type.Elem().String(), ".")
field := &codegen.SnippetField{}
if lastDotIndex != -1 {
field = codegen.Var(codegen.BuiltInType(file.Use(item.Type.Elem().String()[0:lastDotIndex], item.Type.Elem().String()[lastDotIndex+1:])), item.Name)
} else {
field = codegen.Var(codegen.BuiltInType(item.Type.Elem().String()), item.Name)
}
field = field.WithTag(m.fieldTag(item))
snippets = append(snippets, field)
}
if len(m.Keys.Primary) > 0 {
comments = append(comments, "@def primary "+strings.Join(fieldCover(m.Keys.Primary), " "))
}
for k, v := range m.Keys.Indexes {
comments = append(comments, "@def index "+k+" "+strings.Join(fieldCover(v), " "))
}
for k, v := range m.Keys.UniqueIndexes {
comments = append(comments, "@def unique_index "+k+" "+strings.Join(fieldCover(v), " "))
}
comments = append(comments, "go:generate tools gen model2 "+m.TypeName.Name()+" --database=DB --with-comments")
file.WriteBlock(
codegen.Comments(comments...),
codegen.DeclType(
codegen.Var(
codegen.Struct(
snippets...,
), m.TypeName.Name(),
),
),
)
_, _ = file.WriteFile()
return nil
}
func (m *Model) fieldTag(field *builder.StructField) string {
s := ""
if len(field.Tags) > 0 {
for k, v := range field.Tags {
if s != "" {
s += " "
}
s += k + ":" + "\"" + string(v) + "\""
}
}
return s
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/go-genie/sqlx.git
git@gitee.com:go-genie/sqlx.git
go-genie
sqlx
sqlx
v1.1.3

搜索帮助