模板解析

ent的init代码是如何学初始化的?

定义模板

// ./tpl/schema.tpl package schema import ( gint "gitee.com/wennmu/gint.git/cmd" ) type {{ .schemaName }} struct { gint.Schema } func ({{ .schemaName }}) Fields() []gint.Field { return nil } func ({{ .schemaName }}) Edges() []gint.Edge { // Not currently supported return nil }

生成Go文件

schemaDir 为 ./schema

func initSchema(args []string) { for _, schemaName := range args { tmpl, err := template.ParseFiles("./tpl/schema.tpl") if err != nil { panic(err) } genFile := schemaDir + "/" + strings.ToLower(schemaName) + ".go" f, err := os.Create(genFile) defer f.Close() if err != nil { panic(err) } err = tmpl.Execute(f, map[string]string{ "schemaName": schemaName, }) if err != nil { panic(err) } } }

用模板生成的Go文件

package schema import ( gint "gitee.com/wennmu/gint.git/cmd" ) type User struct { gint.Schema } func (User) Fields() []gint.Field { return nil } func (User) Edges() []gint.Edge { // Not currently supported return nil }

参考资料