{{pipeline}} The default textual representation of the value of the pipeline is copied to the output.
我们来看一个例子:
data := map[string]interface{}{ "struct": &Order{ ID: 1,CustID: 2,Total: 3.65,Name: "Something",},"name1": "Timur","name2": "Renat",} t.ExecuteTemplate(rw,"index",data)
这是“索引”:
{{define "index"}} {{range $x := .}} {{.}} <b>{{$x}}</b><br> <i>{{$.struct.ID}}</i><br> <br> # the lines below don't work and break the loop # {{.ID}} # or # {{.struct.ID}} # what if I want here another range loop that handles "struct" members # when I reach "struct" field in the data variable or just do nothing # and just continue the loop? {{end}} {{end}}
输出:
帖木儿
帖木儿
1
长Renat
长Renat
1
{1 2 3.65 Something}
{1 2 3.65 Something}
1
解决方法
模板包中的管道指的是您在命令行中执行的相同类型的“管道”.
route -n get default | grep 'gateway' | awk '{print $2}'
基本上,首先运行路径-n get default.管道字符|不是将结果打印到控制台说“获取route命令的输出,并将其推送到grep命令”.此时,grep“gateway”在从路由接收的输入上运行.然后将grep的输出推入awk.最后,由于没有更多的管道,您在屏幕上看到的唯一输出是awk想要打印的内容.
这在模板包中是相同的.您可以将值传递给方法调用并将它们链接在一起.如:
{{ "Hello World!" | printf "%s" }}
这相当于{{printf“%s”“Hello World!” }}
See an example in the Go Playground here
基本上,
{{ "Hello World!" | printf "%s" }} ^^^^^^^^^^^^ ^^^^^^^^^^ |__________________________|
这在函数式语言中是非常常见的(从我所看到的……我知道它在F#中的一个东西).
点.
点是“上下文意识”.这意味着,它取决于你把它放在哪里改变意义.当您在模板的正常区域中使用它时,它就是您的模型.在范围循环中使用它时,它将成为迭代的当前值.
See an example in the Go Playground here
在链接的示例中,仅在范围循环中,$x和.是相同的.循环结束后,点返回传递给模板的模型.
检查“struct”
你的结构是一个键值对…一个地图.为此,您需要确保在范围循环中提取两个部分:
{{ range $key,$value = . }}
这将为您提供每次迭代时的键和值.之后,您只需要检查相等性:
{{ if eq $key "struct" }} {{ /* $value.ID is the ID you want */ }}
See an example on the Go Playground here
希望这会有所帮助.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。