所有方法
Name() string // 返回模板的名称
New(name string) *Template // 创建一个模板
Clone() (*Template, error) // 返回一个副本
AddParseTree(name string, tree *parse.Tree) (*Template, error) // 添加一个节点
Templates() []*Template // 返回与之相关联的模板切片
Funcs(funcMap FuncMap) *Template // 向模版中添加自定义方法
Lookup(name string) *Template
Parse(text string) (*Template, error)
ParseFiles(filenames ...string) (*Template, error)
ParseGlob(pattern string) (*Template, error)
ParseFS(fsys fs.FS, patterns ...string) (*Template, error)
ExecuteTemplate(wr io.Writer, name string, data interface{}) error
Execute(wr io.Writer, data interface{}) error
DefinedTemplates() string
Option(opt ...string) *Template
模板语法
-
{{.}}
模板语法都包含在{{和}}中间,其中{{.}}中的点表示当前对象。
-
注释
{{/* a comment */}} 注释,执行时会忽略。
-
移除空格
移除左右两边的空格 {{- .Name -}} 移除左边的空格 {{- .Name}} 移除右边的空格 {{.Name -}}
-
条件判断
{{if .Name}} 显示真的值 {{end}} {{if .Name} 显示真的值 {{else}} 为假的值 {{end}} {{if .Name}} 显示真的值 {{else if .Age}} 为假的值 {{end}}
-
循环
{{range .NameList}} 显示的值 {{end}} 如果NameList长度为0,不会有任何输出 {{range .NameList}} 显示的值 {{else}} 长度为0 {{end}} 如果NameList长度为0,则会显示 长度为0 。
-
预定义函数
and 函数返回它的第一个empty参数或者最后一个参数; 就是说"and x y"等价于"if x then y else x";所有参数都会执行; or 返回第一个非empty参数或者最后一个参数; 亦即"or x y"等价于"if x then x else y";所有参数都会执行; not 返回它的单个参数的布尔值的否定 len 返回它的参数的整数类型长度 index 执行结果为第一个参数以剩下的参数为索引/键指向的值; 如"index x 1 2 3"返回x[1][2][3]的值;每个被索引的主体必须是数组、切片或者字典。 print 即fmt.Sprint printf 即fmt.Sprintf println 即fmt.Sprintln html 返回与其参数的文本表示形式等效的转义HTML。 这个函数在html/template中不可用。 urlquery 以适合嵌入到网址查询中的形式返回其参数的文本表示的转义值。 这个函数在html/template中不可用。 js 返回与其参数的文本表示形式等效的转义JavaScript。 call 执行结果是调用第一个参数的返回值,该参数必须是函数类型,其余参数作为调用该函数的参数; 如"call .X.Y 1 2"等价于go语言里的dot.X.Y(1, 2); 其中Y是函数类型的字段或者字典的值,或者其他类似情况; call的第一个参数的执行结果必须是函数类型的值(和预定义函数如print明显不同); 该函数类型值必须有1到2个返回值,如果有2个则后一个必须是error接口类型; 如果有2个返回值的方法返回的error非nil,模板执行会中断并返回给调用模板执行者该错误;
-
比较函数
eq 如果arg1 == arg2则返回真 ne 如果arg1 != arg2则返回真 lt 如果arg1 < arg2则返回真 le 如果arg1 <= arg2则返回真 gt 如果arg1 > arg2则返回真 ge 如果arg1 >= arg2则返回真
-
自定义函数
// 自定义一个模板函数 join := func(arg []string) (string, error) { return strings.Join(arg, ","), nil } // 采用链式操作在Parse之前调用Funcs添加自定义的kua函数 tmpl, err := template.New("hello").Funcs(template.FuncMap{"join": join}).Parse(string(htmlByte)) if err != nil { fmt.Println("create template failed, err:", err) return }