09.参数&变量

参数(Argument)

参数代表一个简单的,由下面的某一条表示的值:

类型描述结果值
go基本类型go语法的布尔值、字符串(不能跨行)、字符、整数、浮点数、虚数、复数视为无类型字面常数
关键字nil代表一个go的无类型的nil值nil
字符.代表dot的值代表当前值
变量名以美元符号起始加上(可为空的)字母和数字构成的字符串,$piOver2$执行结果为变量的值
结构体数据的字段名以句点起始,如.Field执行结果为字段的值
.Field1.Field2(链式调用)执行结果为字段的值
字段也可以在变量上使用,$x.Field1.Field2(链式调用)执行结果为字段的值
字典类型数据的键名以句点起始,如.Key执行结果为该键在字典中对应的成员元素的值
键也可以和字段配合做链式调用,深度不限:.Field1.Key1.Field2.Key2(键不需要以大写字母开始)执行结果为该键在字典中对应的成员元素的值
键也可以用于变量:$x.key1.key2(链式调用)执行结果为该键在字典中对应的成员元素的值
数据的无参数方法名以句点为起始,如:.Method执行结果为dot调用该方法的返回值,dot.Method()(该方法必须有1到2个返回值,如果有2个则后一个必须是error接口类,如果有2个返回值的方法返回的error非nil,模板执行会中断并返回给调用模板执行者该错误)
方法可和字段、键配合做链式调用,深度不限:.Field1.Key1.Method1.Field2.Key2.Method2
方法也可以在变量上使用:$x.Method1.Field(链式调用)
无参数的函数名如:fun执行结果是调用该函数的返回值fun()(对返回值的要求和方法一样)
上面某一条的实例加上括弧用于分组执行结果可以访问其字段或者键对应的值 print (.F1 arg1) (.F2 arg2)(.StructValuedMethod "arg").Field

Arguments可以是任何类型:

  • 如果是指针,在必要时会自动表示为指针指向的值;
  • 如果执行结果生成了一个函数类型的值,如结构体的函数类型字段,该函数不会自动调用,但可以在if等action里视为真。
  • 如果要调用它,使用call函数。

变量

Action里可以初始化一个变量来捕获管道的执行结果。初始化语法如下:

$variable := pipeline

// 其中$variable是变量的名字声明变量的action不会产生任何输出
  1. 如果"range" action初始化了1个变量,该变量设置为迭代器的每一个成员元素
  2. 如果初始化了逗号分隔的2个变量
range $index, $element := pipeline

// 这时,$index和$element分别设置为数组/切片的索引或者字典的键,以及对应的成员元素

// 注意这和go range从句只有一个参数时设置为索引/键不同
  1. 一个变量的作用域只到声明它的控制结构("if"、"with"、"range")的"end"为止
  2. 如果不是在控制结构里声明会直到模板结束为止
  3. 子模板的调用不会从调用它的位置(作用域)继承变量

模板开始执行时,$会设置为传递给Execute方法的参数,就是说,dot的初始值。

上次修改: 14 April 2020