5.4 参数、变量和管道

一个参数(argument)就是模板中的一个值。它可以是布尔值、整数、字符串等字面量,也可以是结构、结构中的一个字段或者数组中的一个键。除此之外,参数还可以是一个变量、一个方法(这个方法必须只返回一个值,或者只返回一个值和一个错误)或者一个函数。最后,参数也可以是一个点( . ),用于表示处理器向模板引擎传递的数据。

比如说,在以下这个例子中, arg 是一个参数:

{{ if arg }}
 some content
{{ end }}

除了参数之外,用户还可以在动作中设置变量。变量以美元符号( $ )开头,就像这样:

$variable := value

初看上去,变量似乎并没有什么特别大的用处,但实际上它们对动作来说是非常重要的。作为例子,以下代码展示了怎样使用变量去实现迭代动作的一个变种:

{{ range $key, $value := . }}
 The key is {{ $key }} and the value is {{ $value }}
{{ end }}

在这个例子中,点( . )是一个映射,而动作 range 在迭代这个映射的时候,会将变量 $key$value 分别初始化为当前被迭代映射元素的键和值。

模板中的管道(pipeline)是多个有序地串联起来的参数、函数和方法,它的工作方式和语法跟Unix的管道也非常相似:

{{ p1 | p2 | p3 }}

这里的 p1p2p3 可以是参数或者函数。管道允许用户将一个参数的输出传递给下一个参数,而各个参数之间则使用 | 分隔。代码清单5-13展示了一个管道的使用示例。

代码清单5-13 模板中的管道

<!DOCTYPE html>
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Go Web Programming</title>
 </head>
 <body>
  {{ 12.3456 | printf "%.2f" }}
 </body>
</html>

为了更好地显示内容,用户经常需要在模板中对数据进行格式化。比如,在代码清单5-13所示的例子中,我们想要在显示浮点数的时候只保留两位小数精度。为了做到这一点,我们可以使用 fmt.Sprintf 函数或者模板内置的 printf 函数对浮点数进行格式化(这个 printf 函数实际上就是 fmt.Sprintf 函数的别名)。

除此之外,我们还通过管道将数字 12.3456 传递给了 printf 函数,并在 printf 函数的第一个参数中指定了格式指示符(specifier),最终,这个管道将返回 12.35 作为结果。

虽然管道已经非常强大,但它还不是模板提供的最为强大的功能,接下来的一节要介绍的函数才是。

results matching ""

    No results matching ""