package main import ( _ "embed" "flag" "fmt" "git.diulo.com/mogfee/kit/mysql/ddl" "git.diulo.com/mogfee/kit/stringx" "html/template" "os" "os/exec" "strings" ) //go:embed template.tpl var modelTemplate string func main() { sqlFile := flag.String("f", "", "数据库创建mysqldump文件") savePath := flag.String("s", "./model/", "数据库存储路径") flag.Parse() fmt.Println("sqlfile:", *sqlFile) fmt.Println("savePath:", *savePath) if *sqlFile == "" { return } os.MkdirAll(*savePath, os.ModePerm) err := ddl.Parser(*sqlFile, func(table *ddl.Table) error { table.Imports = append(table.Imports, "gorm.io/gorm") table.Imports = append(table.Imports, "context") //table.Imports = append(table.Imports, "git.diulo.com/mogfee/kit/errors") saveFileName := fmt.Sprintf("%s/%s_gen.go", strings.TrimRight(*savePath, "/"), table.Name) tmp, err := template.New("").Funcs(map[string]any{ "UpperType": func(str string) string { return stringx.Ucfirst(ddl.GoName(str)) }, "LowerType": func(str string) string { if str == "type" { str = "vtype" } return stringx.Lcfirst(ddl.GoName(str)) }, "UpdateColumn": func(columns []*ddl.TableColumn) string { arr := []string{} for _, v := range columns { arr = append(arr, fmt.Sprintf("%s=?", v.Name)) } return strings.Join(arr, " and ") }, }).Parse(modelTemplate) if err != nil { return err } //ddl.PrintJson(table) //table.Primary.GoType //fmt.Println(table.Primary) f, err := os.Create(saveFileName) if err != nil { return err } defer f.Close() return tmp.Execute(f, table) }) if err != nil { panic(err) } exec.Command("gofmt", "-l", "-w", *savePath+"/..").Run() }