一个参数(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 ""