Hertz 源码解析—— hz 是怎么支持自定义模板功能的?
2023-09-08 02:27:49
本文将为您揭晓 Hertz 代码生成工具 hz 内部是如何实现自定义模板功能的。从上篇文章忽略的自定义模板入口开始,我们将一步步解析 hz 是如何实现该功能的。
从被忽略的入口开始
我们在第一篇文章中介绍了 hz 的基本使用,并解释了它如何使用内置的模板来生成代码。然而,我们并没有提到 hz 也可以使用自定义模板。在本文中,我们将弥补这一疏忽,并详细介绍 hz 是如何支持自定义模板的。
自定义模板的入口
要使用自定义模板,您需要在 hz 命令中指定模板路径。例如,要使用名为 my_template.tmpl
的自定义模板,您可以使用以下命令:
hz generate scaffold post --template=my_template.tmpl
这将指示 hz 使用 my_template.tmpl
模板来生成代码。
自定义模板的内容
自定义模板可以使用任何文本编辑器创建。模板文件的内容是一个 Go 模板,它定义了生成的代码的结构和内容。
例如,以下是一个简单的自定义模板,它将生成一个带有 name
和 age
字段的结构体:
type {{ .Name }} struct {
Name string
Age int
}
当使用此模板生成代码时,hz 将使用模板中的变量来填充生成的代码。例如,如果我们在命令行中指定 --name=Post
和 --age=20
,那么 hz 将生成以下代码:
type Post struct {
Name string
Age int
}
自定义模板中的函数和变量
除了变量之外,自定义模板还可以使用函数和内置函数。函数可以用来执行各种操作,例如字符串操作、数学计算和条件判断。内置函数可以用来访问模板中的信息,例如当前时间和日期。
例如,以下自定义模板使用内置函数 time.Now()
来生成当前时间戳:
{{ time.Now.UnixNano }}
当使用此模板生成代码时,hz 将使用内置函数 time.Now()
来填充生成的代码。例如,如果我们在命令行中指定 --name=Post
和 --age=20
,那么 hz 将生成以下代码:
1658031931814681000
自定义模板中的流程和操作
自定义模板还可以使用流程和操作来控制代码的生成。流程可以用来控制代码的顺序,而操作可以用来执行各种任务,例如创建文件和目录。
例如,以下自定义模板使用流程 if
来控制代码的生成:
{{ if .Age > 18 }}
// 此代码只适用于年龄大于 18 岁的人
{{ end }}
当使用此模板生成代码时,hz 将根据模板中的条件来生成代码。例如,如果我们在命令行中指定 --name=Post
和 --age=20
,那么 hz 将生成以下代码:
// 此代码只适用于年龄大于 18 岁的人
总结
通过自定义模板,您可以完全控制生成的代码的结构和内容。这使得 hz 成为一个非常灵活的代码生成工具,可以用来生成各种各样的代码。