Golang系列(九)之模板语法

1. 基本语法

go 统一使用了 {{ 和 }} 作为左右标签,没有其他的标签符号。

使用 . 来访问当前位置的上下文

使用 $ 来引用当前模板根级的上下文

使用 $var 来访问创建的变量

模板中支持的 go 语言符号

{{ "string" }}  // 一般 string
{{`raw string`}}  // 原始 string
{{ 'c' }}  // byte
{{print nil}}  // nil 也被支持

模板中的 pipeline

可以是上下文的变量输出,也可以是函数通过管道传递的返回值

{{. | FuncA | FuncB | FuncC}}

当 pipeline 的值等于:

  • false 或 0
  • nil 的指针或 interface
  • 长度为 0 的 array, slice, map, string

那么这个 pipeline 被认为是空

1.1. if … else … end 

{{ if  pipeline}}{{end}}

if 判断时,pipeline 为空时,相当于判断为 False

支持嵌套的循环

{{ if  .IsHome}}
{{ else }}
     {{ if  .IsAbout}}{{end}}
{{end}}

也可以使用 else if 进行

{{ if  .IsHome}}
{{ else  if  .IsAbout}}
{{ else }}
{{end}}

1.2. range … end

{{range pipeline}}{{.}}{{end}}

pipeline 支持的类型为 array, slice, map, channel

range 循环内部的 . 改变为以上类型的子元素

对应的值长度为 0 时,range 不会执行,. 不会改变。

pages := []struct {
     Num  int
}{{ 10 }, { 20 }, { 30 }}
 
this .Data[ "Total" ] =  100
this .Data[ "Pages" ] = pages

使用 .Num 输出子元素的 Num 属性,使用 $. 引用模板中的根级上下文

{{range .Pages}}
     {{.Num}} of {{$.Total}}
{{end}}

使用创建的变量,在这里和 go 中的 range 用法是相同的。

{{range $index, $elem := .Pages}}
     {{$index}} - {{$elem.Num}} - {{.Num}} of {{$.Total}}
{{end}}

range 也支持 else

{{range .Pages}}
{{ else }}
     {{ /* 当 .Pages 为空 或者 长度为 0 时会执行这里 */ }}
{{end}}

1.3. with … end

{{with pipeline}}{{end}}

with 用于重定向 pipeline

{{with .Field.NestField.SubField}}
     {{.Var}}
{{end}}

也可以对变量赋值操作

{{with $value :=  "My name is %s" }}
     {{printf .  "slene" }}
{{end}}

with 也支持 else

{{with pipeline}}
{{ else }}
     {{ /* 当 pipeline 为空时会执行这里 */ }}
{{end}}

1.4. define

define 可以用来定义自模板,可用于模块定义和模板嵌套

{{define  "loop" }}
     <li>{{.Name}}</li>
{{end}}

使用 template 调用模板

<ul>
     {{range .Items}}
         {{template  "loop"  .}}
     {{end}}
</ul>

1.5. template

{{template  "模板名"  pipeline}}

将对应的上下文 pipeline 传给模板,才可以在模板中调用

Beego 中支持直接载入文件模板

{{template  "path/to/head.html"  .}}

Beego 会依据你设置的模板路径读取 head.html

在模板中可以接着载入其他模板,对于模板的分模块处理很有用处

1.6. 注释

允许多行文本注释,不允许嵌套

{{ /* comment content
support new line */



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值