1.模板语法
引用其他列参数
直接使用 .列名称
就可以引用数据库其他列作为参数
.action{.列名称}
注释语法
.action{/* 这是一条注释 */}
变量声明与赋值
.action{$var := xxx} 是声明变量
.action{$var = yyy} 是给变量重新赋值
.action{$var} 是输出
流程控制-判断
支持 if 条件判断,当前支持最简单的 bool 类型和 string 类型,定义如下所示。
.action{if .condition1}
.action{/* 操作一 */}
.action{else if .condition2}
.action{/* 操作二 */}
.action{end}
流程控制-循环
支持 range 循环来遍历 map、slice 中的内容,语法格式如下所示。
.action{range $index, $value := .slice}
.action{$value}
.aciton{end}
在这个 range 循环内,遍历数据通过$index 和$value。还有一种遍历方式,语法格式如下所示。
.action{range .slice}
.action{.}
.aciton{end}
这种方式无法访问到$index 和$key 的值,需要通过{{.}}来访问对应的$value。那么在这样情况下,在循环体内,外部变量需要使用{{$.}}来访问。
{{break}}
最里面的 {{range pipeline}} 循环提前结束,停止当前迭代并绕过所有剩余迭代。
{{continue}}
最里面的 {{range pipeline}} 循环的跳过当前迭代
逻辑运算
函数语法 | 函数作用 |
---|---|
.action{if not .condition} .action{end} | not 非 |
.action{if and .condition1 .condition2} .action{end} | and 与 |
.action{if or .condition1 .condition2} .action{end} | or 或 |
.action{if eq .var1 .var2} .action{end} | eq 等于 |
.action{if ne .var1 .var2} .action{end} | ne 不等于 |
.action{if lt .var1 .var2} .action{end} | lt 小于 |
.action{if le .var1 .var2} .action{end} | le 小于等于 |
.action{if gt .var1 .var2} .action{end} | gt 大于 |
.action{if ge .var1 .var2} .action{end} | ge 大于等于 |
定义局部变量
用法 1:
{{with pipeline}} T1 {{end}}
管道的值将赋给该标签内部的“.”。(注:这里的“内部”一词是指被{{with pipeline}}…{{end}}包围起来的部分,即 T1 所在位置)
用法 2:
{{with pipeline}} T1 {{else}} T0 {{end}}
如果管道的值为空,“.”不受影响并且执行 T0,否则,将管道的值赋给“.”并且执行 T1。
说明:{{end}}标签是 if、with、range 的结束标签。
内置函数
sprig 函数
预定义函数
and
函数返回它的第一个empty参数或者最后一个参数;
就是说"and x y"等价于"if x then y else x";所有参数都会执行;
or
返回第一个非empty参数或者最后一个参数;
亦即"or x y"等价于"if x then x else y";所有参数都会执行;
not
返回它的单个参数的布尔值的否定
len
返回它的参数的整数类型长度
index
执行结果为第一个参数以剩下的参数为索引/键指向的值;
如"index x 1 2 3"返回x[1][2][3]的值;每个被索引的主体必须是数组、切片或者字典。
print
即fmt.Sprint
printf
即fmt.Sprintf
println
即fmt.Sprintln
比较函数
布尔函数会将任何类型的零值视为假,其余视为真。
下面是定义为函数的二元比较运算的集合:
eq 如果arg1 == arg2则返回真
ne 如果arg1 != arg2则返回真
lt 如果arg1 < arg2则返回真
le 如果arg1 <= arg2则返回真
gt 如果arg1 > arg2则返回真
ge 如果arg1 >= arg2则返回真
为了简化多参数相等检测,eq(只有 eq)可以接受 2 个或更多个参数,它会将第一个参数和其余参数依次比较,返回下式的结果:
{{eq arg1 arg2 arg3}}
比较函数只适用于基本类型(或重定义的基本类型,如”type Celsius float32”)。但是,整数和浮点数不能互相比较。
管道
管道是链接起来的参数、函数或者方法序列,和 Unix 管道一样:
.action{p1 | p2 | p3}
管道允许我们将上一个输出作为参数传递到下一个指令(放在最后),不同元素之间通过 |
分隔。
示例,下面代码相当于 c/(a+b)
.action{.a | addf .b | divf .c}
2.示例
一些简单案例
.action{div (len .星级) 3}
.action{typeOf .最后联系日期}
.action{.最后联系日期 | toDate "2006-01-02" | typeOf}
.action{$lastday := .最后联系日期 | toDate "2006-01-02"}
获取 最后联系日期
到 今天
的天数(整数)
.action{div (now.Sub .最后联系日期).Hours 24}
获取 最后联系日期
到 今天
的天数(小数)
.action{divf (now.Sub .最后联系日期).Hours 24}
获取自定义属性 attr1 的值
.action{ index ."custom-attr1" }
使用 if 判断
.action{$days := 0}
.action{if empty .最后联系日期}
.action{$baseDate := toDate "2006-01-02" "2023-01-01"}
.action{$days = divf (now.Sub $baseDate).Hours 24}
.action{else}
.action{$days = divf (now.Sub .最后联系日期).Hours 24}
.action{end}
.action{$days}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于