在一个项目中,你需要确保 entc 和 ent 的版本是 完全相同的。一个可选的办法是,运行 entc 时,要求 go generate 使用 go.mod 文件中中使用的版本。
go mod init <project>
然后,再运行下面的命令将 ent 添加至 go.mod 文件:
go get github.com/facebookincubator/ent/cmd/entc
添加一个 generate.go 文件到 <project>/ent 目录下:
package ent
//go:generate go run github.com/facebookincubator/ent/cmd/entc generate ./schema
最后,你可以在项目根目录下运行 go generate ./ent ,然后就可以运行 entc 工具为项目生成代码了。
代码生成选项
有关代码生成的更多选项,请运行 entc generate -h:
generate go code for the schema directory
Usage:
entc generate [flags] path
Examples:
entc generate ./ent/schema
entc generate github.com/a8m/x
Flags:
--header string override codegen header
-h, --help help for generate
--idtype [int string] type of the id field (default int)
--storage strings list of storage drivers to support (default [sql])
--target string target directory for codegen
--template strings external templates to execute
储存选项
entc 可以为 SQL 和 Gremlin 生成代码,默认是为 SQL 生成代码。
外部模板
entc 可以接受运行 Go 外部模板。如果外部模板名与 entc 的某个模板名重复,那么外部模板会覆盖 entc 的模板。否则,entc 会运行并输出该模板的内容到一个与该模板同名的文件。
通过包调用 entc
另一种运行 entc 的方法是像下面的代码一样通过包调用:
package main
import (
"log"
"github.com/facebookincubator/ent/entc"
"github.com/facebookincubator/ent/entc/gen"
"github.com/facebookincubator/ent/schema/field"
)
func main() {
err := entc.Generate("./schema", &gen.Config{
Header: "// Your Custom Header",
IDType: &field.TypeInfo{Type: field.TypeInt},
})
if err != nil {
log.Fatal("running ent codegen:", err)
}
}