常见GO语言的模板引擎
Irisofferssupportfor6templateparsersoutofthebox
Go模板
Go模板是一种功能强大的定制输出的方法,无论您是在创建网页、发送电子邮件、使用Buffalo、Go-hugo还是仅使用一些CLI,比如kubectl。
Go模板控制结构
Golangtemplate小抄
点字符(.)
在Go语法中,模板变量可以是布尔值、字符串、字符、整数、浮点数、虚数或复数常量。可以使用点{{.}}访问传递到模板的数据.如果数据是复杂类型,则可以使用点{{.FieldName}}访问其字段。如果数据包含多个复杂结构,则可以将Dots链接在一起。{{.Struct.StructTwo.Field}}
模板中的变量
{{$number:=.}}h1Itisdaynumber{{$number}}ofthemonth/h1
If/ElseStatements
h1Hello,{{if.Name}}{{.Name}}{{else}}the{{end}}!/h1
删除空白
我们可以通过忽略或最小化效果来更改我们的模板以更好地处理它,或者我们可以使用减号输出模板。
h1Hello,{{if.Name}}{{.Name}}{{-else}}Anonymous{{-end}}!/h1
RangeBlocks
typeItemstruct{ Namestring Priceint}typeViewDatastruct{ Namestring Items[]Item}
{{range.Items}}divh{{.Name}}/hspan${{.Price}}/span/div{{end}}
模板函数
获取索引值{{indexxnumber}}
bodyh1{{index.FavNums}}/h1/body
typepersonstruct{ Namestring FavNums[]int}funcmain(){ tpl:=template.Must(template.ParseGlob("*.gohtml")) tpl.Execute(os.Stdout,person{"Curtis",[]int{7,11,9}})}
andnot函数:
{{ifand.User.User.Admin}}Youaanadminuser!{{else}}Accessdenied!{{end}}
typeUserstruct{Adminbool}typeViewDatastruct{*User}
比较函数eq/ne/ge/gt/le/lt{{oparg1arg}}
eq函数比较特殊,可以拿多个参数和第一个参数进行比较:
{{eqarg1argargarg}}=arg1==arg
arg1==arg
arg1==arg
管道
函数调用可以链式调用,前一个函数的输出结果作为下一个函数调用的参数。html/template称之为管道,类似于linuxshell命令中的管道一样,它采用
分隔。
注意前一个命令的输出结果是作为下一个命令的最后一个参数,最终命令的输出结果就是这个管道的结果。
嵌套模板和布局
嵌套模板
嵌套模板可以用于经常跨模板、页脚或页眉使用的部分代码。与分别更新每个模板不同,我们可以使用所有其他模板都可以使用的嵌套模板。
{{define"footer"}}footer pHeisthefooter/p/footer{{end}}
定义了一个名为“footer”的模板,可以在其他模板中使用,例如:
{{template"footer"}}
在模板之间传递变量
用于包含嵌套模板的template操作还允许第二个参数将数据传递给嵌套模板。
//Defineanestedtemplatecalledheader{{define"header"}} h1{{.}}/h1{{end}}//Calltemplateandpassanameparameter{{range.Items}}div{{template"header".Name}}span${{.Price}}/span/div{{end}}
创建布局
//OmittedimportspackagevarLayoutDirstring="views/layouts"varbootstrap*template.Templatefuncmain(){ varerrerror bootstrap,err=template.ParseGlob(LayoutDir+"/*.gohtml") iferr!=nil{ panic(err) }