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 */}}
转载请著名出处
Go语言模板脚本语法——详细相关推荐
- 易语言大漠多线程模板脚本主线程
脚本主线是脚本的核心代码,里面包括对大漠对象的创建,对游戏应用窗口的绑定,同时启动主副线程. 511遇见易语言多线程大漠多线程 大漠多线程模板脚本主线程源码 .版本 2 .支持库 EThread.子程 ...
- 关于JS脚本语言的基础语法
JS脚本语言的基础语法:输出语法 alert("警告!"); confirm("确定吗?"); prompt("请输入密码");为弱 ...
- 手写C语言之分支循环语句-语法详细版(06)
目录 前言 什么是语句? 分支选择语句 if 语句 悬空else switch语句 switch和break switch-default 循环语句 while循环 break与continue 九九 ...
- Django模板系统(非常详细)
翻译www.djangobook.com之第四章:Django模板系统 The Django Book:第4章 Django模板系统 revised by xin_wang 前面的章节我们看到如何在视 ...
- 生信人写程序2. Editplus添加Perl, Shell, R模板和语法高亮
https://www.editplus.com/ 前言 "工欲善其事必先利其器",生信工程师每天写代码.搭流程,而且要使用至少三门编程语言,没有个好集成开发环境(IDE,Inte ...
- 脚本编程语言python语言-python语言是脚本语言吗
Python是一种编程语言还是脚本语言? Python是GuidoVanRossum开发的最著名的编程语言之一.Python在开发人员中很受欢迎,因为它具有清晰的语法和简单的代码,甚至对于初学者来说也 ...
- velocity模板的语法简要汇总
velocity模板的语法简要汇总 What's velocity Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template ...
- 视图层、WXML语法、WXSS样式、事件、WXS脚本语法
一.微信小程序视图层 框架的视图层由 WXML 与 WXSS 编写,由组件来进行展示.将逻辑层的数据反应成视图,同时将视图层的事件发送给逻辑层. ●WXML(WeiXin Markup languag ...
- Themleaf模板基础语法使用介绍
Themleaf模板基础语法使用介绍 项目首页地址:https://blog.csdn.net/weixin_45019350/article/details/108869025 一. Thymele ...
最新文章
- JavaScript实现backtracking Jump Game回溯跳跃游戏算法(附完整源码)
- 利用shell脚本监控网站状态
- Python高级——魔法属性和方法
- UML之一综合设计例题
- java与javascript
- python绘制小猪佩奇
- Graphviz神经网络的绘图
- Fisco bcos 在多机器上搭建多个节点的区块链网络 教程
- 自己动手写操作系统(三)
- 猎豹网校c语言,[猎豹网校]数据结构与算法_C语言
- JFlash软件解锁GD32MCU
- 6款好用的ppt制作软件推荐
- 趋势丨关于未来世界的50个超级趋势
- 【XLSX】Excel表格的导入和导出
- 粒子滤波 python,粒子滤波器基本原理.ppt.ppt
- IDEA复制文件名快捷键设置
- 中专计算机专业包括哪些方面,中专计算机有什么专业?
- MySQL学习笔记(6)
- 软件授权文件.lic文件
- Google Chrome显示粉红色屏幕
热门文章
- 分布式锁——Redisson
- 常用的三大传感器有哪些优缺点(激光雷达、毫米波雷达和相机)
- GTX/GTH/GTY/GTP/GTZ/GTM有什么区别?
- 2021 年全国职业院校技能大赛 网络搭建与应用赛项
- 【Java核心技术大会 PPT分享】张家驹:云原生时代的Java — Quarkus及其最新进展...
- CMD命令格式化U盘(磁盘)
- 【Statistics-5】——正态分布与二项分布的逼近
- python一元线性回归算法_6一元线性回归_清华编程高手尹成带你基于算法实践python量化交易_其他视频-51CTO学院...
- html中调用广告居中,修改CSS让AdSense广告内容居中
- 【手册】如何编译/修改三星手机Rom(一)