Pipelines
管道是“命令”的可能链式序列。命令可以是简单值(参数)或函数或方法调用,可能带有多个参数:
Argument
The result is the value of evaluating the argument.
.Method [Argument...]
The method can be alone or the last element of a chain but,
unlike methods in the middle of a chain, it can take arguments.
The result is the value of calling the method with the
arguments:
dot.Method(Argument1, etc.)
functionName [Argument...]
The result is the value of calling the function associated
with the name:
function(Argument1, etc.)
Functions and function names are described below.
通过使用管道字符 '|' 将一系列命令分开,可以将"管道"串联在一起。在串联的管道中,每个命令的结果都作为后续命令的最后一个参数传递。管道中最后一个命令的输出就是管道的值。
"参数"和"管道"是数据的评估。
"点号" .
基本上是一个光标,指向执行模板时传递的数据结构中的某个位置。点号的起始值是您传递的值,但此点由许多操作修改,例如{{range}}
或{{with}}
。
执行模板时,遍历结构并将表示为句点'.'的光标设置为执行过程中当前位置处的结构中的值。
所以当你写.Name
时,意味着你要引用点号当前指向的值的字段、方法或名为Name
的键。例如,如果您传递一个struct
,在模板开始时,.Name
将表示结构字段Name
(如果存在)或其名为Name()
的方法。
当您调用/包含另一个模板时,有可能告诉要传递给它执行的值。当您编写{{template "something" .}}
时,这意味着您希望将点号当前指向的值传递给模板执行。如果您只想传递点号所指向的结构体的Name
字段,则可以像这样执行:{{template"something".Name}}
。
您在{{template}}
中作为管道传递的值将成为调用其他模板内部的点。
因此,当处理/渲染模板时,可以更改点,并使其仅指向最初传递给模板执行的值的一部分。通常很方便或需要仍然可以访问原始值而不仅仅是光标。为此,模板包提供了$
:
当执行开始时,$设置为传递给Execute的数据参数,即点的起始值。
因此,即使您处于例如{{range}}
之内(它将点设置为您正在遍历的数组/切片/映射的连续元素),您仍然可以达到并引用传递给模板执行的任何其他部分的值。
因此,例如,如果您正在遍历书籍的切片{{range.Books}}
,并且需要最初传递的结构的Name
字段,则可以在{{range}}
内部像这样执行:
{{range .Books}}
Title: {{.Title}}
Original name: {{$.Name}}
{{end}}
{{template "name" . }}
我是将此模板绑定到当前上下文吗? - Rahul