Go语言模板脚本语法——详细

1、语法基础
用 {{ }} 标记脚本代码。

用 . 访问当前上下文环境的变量、参数,例如 {{.userid}}。

用 $ 定义、访问变量, $ 访问全局上下文环境,例如:{{$ v_str := “Hello World!”}} {{$v_str}}。

用 := 给变量赋值,例如 {{ $ m_user := "蜗牛” }

注释:{{/*
    注释内容
    支持多行
  */}}
变量、参数、函数区分大小写。

2、输出变量、常量、函数返回值
直接输出内容:{{ 变量 参数 函数 }}

▶ 输出常量字符串: {{”Hello !"}};输出数值 {{ 100 }}

▶ 输出常量字节:{{‘A’}}

▶ 输出变量:{{.userid}}、{{$ v_str}}

▶ 输出函数返回值:{{html “Hello” " " “World!”}}

▶ 输出Model型参数:{{.user.name}}、{{$.user.name}}

通过输出函数输出:{{函数 参数…}}

▶ html:输出 html 文本内容

▶ js:输出 JS 格式内容

3、脚本控制语句
3.1、判断语句
if 语法:{{if xxx}} … {{else}} … {{end}}

▶ if 直接判断变量:{{if .userid}}、{{if $ .user}}等。

if 直接判断变量、参数,包括函数返回值
◆ 当参数变量是:fasle 或 0
◆ nil 空类型
◆ 长度为零的 数组、Model、List、字符串等
这时被判断为 假 false,否则为真 true,例如:
{{if $ .user}}
{{$.user.name}}
{{else}}
姓名未知
{{end}}
▶ if 配合逻辑函数判断

◆ if eq 等于:{{if eq 参数0 参数1 参数2 … }} {{end}},
  参数0 为判断主参数,
  参数0 == 参数1 OR 参数0 = 参数2 OR …,
  当有一个成立便返回 ture,等同于:
  {{if or (eq 参数0 参数1) (eq 参数0 参数2) …}} {{end}}
◆ if ne 不等于:{{if ne 参数1 参数2}} {{end}}
◆ if lt 小于:{{if lt 参数1 参数2}} {{end}}
◆ if le 小于等于:{{if le 参数1 参数2}} {{end}}
◆ if gt 大于:{{if gt 参数1 参数2}} {{end}}
◆ if ge 大于等于:{{if ge 参数1 参数2}} {{end}}
◆ if and 与:{{if and (表达式1) (表达式2) …}} {{end}},
  逐个判断各表达式,遇到空返回该表达式值(false),
  或返回最后表达式值(true)
  表达式可以是 eq gt等判断函数,也可是变量。
◆ if or 或:{{if or (表达式1) (表达式2) … }} {{end}},
  类似and,逐个判断,返回首个非空表达式值,
  否则返回最后一个表达式值。
◆ if not 非:{{if not 表达式}} {{end}},返回表达式的否定值。
以上参数、表达式都可以包含 变量 或 函数返回值,例如 {{if eq $ v_str (FUNC_ADD 0 $v_i)}}
建议:如非必要,使用简单形式 {{if eq $ i 1}} … {{end}}
3.2、循环遍历
语法:

{{range $ idx,$ elem := $ list}}
  {{/* 当 $ list 非空 或 长度大于 0 执行
    $ idx 为循环变量 从 0 开始
    $ elem 为元素 变量 或 Model 类型 [ id:1;name:毛豆 ]
  /}}
[ {{else}} ]
  {{/
else 可选 当 $ list 为空 或 长度为 0 执行 */}}
{{end}}
$list为数组时,直接遍历数组的值。

{{range $ i,$ v:=.user}}
  No{{$ i}}:{{$ v}}
{{end}}
{{range}} 可以嵌套。

3.3、with结构
语法:

{{with 变量 或 赋值语句}}
  …
[ {{else}} ]
  {{/* else 可选 当 变量 为空 长度为 0 执行 */}}
{{end}}
▶ 变量为 Model

{{with . user}}
  {{. name}}
{{else}}
  {{/* . user 为空 */}}
{{end}}
▶ with 赋值语句

{{with $val := "Today is : %s}}
  {{printf . “2021-07-01”}}
{{end}}
printf . 中的点 等同 $val。

4、作用域
4.1、局部变量作用域
if、range、with 段内是局部变量的作用域范围,其中定义的变量只在段有效,例如:

{{if .user}}
  {{$ v1 := 10}}
  {{$ v1}} {{/* = 10 */}}
{{end}}

{{if eq $v1 10}} {{/* $v1 无效 ,返回: undefined variable $v1 错误 */}}
  YES!
{{end}}
4.2、全局变量作用域
全局变量的引用需要加前缀 $,例如:定义页面参数 user。

全局变量在 if、 range、 with 段内修改,只在段内有效,定义全局变量{{g_var:=100}}

▶ if 段内权局变量

if 段内引用权局变量,可以不加 $ 前缀:
{{if .user}}
  姓名:{{.user.name}} {{/* 如此使用符合规则 ,建议也加 前缀 $ /}}
  {{$ g_var := 999}}
  g_var :{{$ g_var}} {{/
得到 999 /}}
{{end}}
g_var :{{$ g_var}} {{/
得到 111 */}}
▶ range 段内权局变量

range 段内引用根全局变量(非当前上下文全局变量),需要在 . 前加 $

{{range $ idx,$ elem := $ list}}
  姓名:{{.user.name}} {{/* 这样引用 虽然不返回错误,但无法取得 name 的值 /}}
  {{$ g_var := 999}}
  g_var :{{ $ g_var}} {{/
得到 999 /}}  
{{end}}
g_var :{{$ g_var}} {{/
得到 111 */}}
▶ with 段内权局变量

with 段内引用根全局变量(非当前上下文全局变量),必需在 . 前加 $ ,否则会引发异常。

{{with $ val := "Today is : % s }}
  {{printf . .user.birthday}} {{/* 引发异常 /}}
  {{$ g_var := 999}}
  g_var :{{$ g_var}} {{/
得到 999 /}}
{{end}}
g_var :{{$ g_var}} {{/
得到 111 */}}

转载请著名出处

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ti-蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值