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 */}}

转载请著名出处

Go语言模板脚本语法——详细相关推荐

  1. 易语言大漠多线程模板脚本主线程

    脚本主线是脚本的核心代码,里面包括对大漠对象的创建,对游戏应用窗口的绑定,同时启动主副线程. 511遇见易语言多线程大漠多线程 大漠多线程模板脚本主线程源码 .版本 2 .支持库 EThread.子程 ...

  2. 关于JS脚本语言的基础语法

    JS脚本语言的基础语法:输出语法  alert("警告!");  confirm("确定吗?");   prompt("请输入密码");为弱 ...

  3. 手写C语言之分支循环语句-语法详细版(06)

    目录 前言 什么是语句? 分支选择语句 if 语句 悬空else switch语句 switch和break switch-default 循环语句 while循环 break与continue 九九 ...

  4. Django模板系统(非常详细)

    翻译www.djangobook.com之第四章:Django模板系统 The Django Book:第4章 Django模板系统 revised by xin_wang 前面的章节我们看到如何在视 ...

  5. 生信人写程序2. Editplus添加Perl, Shell, R模板和语法高亮

    https://www.editplus.com/ 前言 "工欲善其事必先利其器",生信工程师每天写代码.搭流程,而且要使用至少三门编程语言,没有个好集成开发环境(IDE,Inte ...

  6. 脚本编程语言python语言-python语言是脚本语言吗

    Python是一种编程语言还是脚本语言? Python是GuidoVanRossum开发的最著名的编程语言之一.Python在开发人员中很受欢迎,因为它具有清晰的语法和简单的代码,甚至对于初学者来说也 ...

  7. velocity模板的语法简要汇总

    velocity模板的语法简要汇总 What's velocity Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template ...

  8. 视图层、WXML语法、WXSS样式、事件、WXS脚本语法

    一.微信小程序视图层 框架的视图层由 WXML 与 WXSS 编写,由组件来进行展示.将逻辑层的数据反应成视图,同时将视图层的事件发送给逻辑层. ●WXML(WeiXin Markup languag ...

  9. Themleaf模板基础语法使用介绍

    Themleaf模板基础语法使用介绍 项目首页地址:https://blog.csdn.net/weixin_45019350/article/details/108869025 一. Thymele ...

最新文章

  1. JavaScript实现backtracking Jump Game回溯跳跃游戏算法(附完整源码)
  2. 利用shell脚本监控网站状态
  3. Python高级——魔法属性和方法
  4. UML之一综合设计例题
  5. java与javascript
  6. python绘制小猪佩奇
  7. Graphviz神经网络的绘图
  8. Fisco bcos 在多机器上搭建多个节点的区块链网络 教程
  9. 自己动手写操作系统(三)
  10. 猎豹网校c语言,[猎豹网校]数据结构与算法_C语言
  11. JFlash软件解锁GD32MCU
  12. 6款好用的ppt制作软件推荐
  13. 趋势丨关于未来世界的50个超级趋势
  14. 【XLSX】Excel表格的导入和导出
  15. 粒子滤波 python,粒子滤波器基本原理.ppt.ppt
  16. IDEA复制文件名快捷键设置
  17. 中专计算机专业包括哪些方面,中专计算机有什么专业?
  18. MySQL学习笔记(6)
  19. 软件授权文件.lic文件
  20. Google Chrome显示粉红色屏幕

热门文章

  1. 分布式锁——Redisson
  2. 常用的三大传感器有哪些优缺点(激光雷达、毫米波雷达和相机)
  3. GTX/GTH/GTY/GTP/GTZ/GTM有什么区别?
  4. 2021 年全国职业院校技能大赛 网络搭建与应用赛项
  5. 【Java核心技术大会 PPT分享】张家驹:云原生时代的Java — Quarkus及其最新进展...
  6. CMD命令格式化U盘(磁盘)
  7. 【Statistics-5】——正态分布与二项分布的逼近
  8. python一元线性回归算法_6一元线性回归_清华编程高手尹成带你基于算法实践python量化交易_其他视频-51CTO学院...
  9. html中调用广告居中,修改CSS让AdSense广告内容居中
  10. 【手册】如何编译/修改三星手机Rom(一)