Google Go的文本模板中范围的最后一个元素的特殊情况处理

时间:2012-05-25 00:30:35

标签: templates go

我尝试使用go的模板系统编写一个看起来像这样的字符串: (p1,p2,p3),其中p1,p2,...来自程序中的数组。我的问题是如何正确地为最后一个(或第一个)元素放置逗号。

我输出的非工作版本(p1,p2,p3,)看起来像这样:

package main

import "text/template"
import "os"
func main() { 
    ip := []string{"p1", "p2", "p3"}
    temp := template.New("myTemplate")
    temp,_ = temp.Parse(paramList)
    temp.Execute(os.Stdout, ip)

}

const paramList = 
`{{ $i := . }}({{ range $i }}{{ . }}, {{end}})`

到目前为止,我的最佳线索是http://golang.org/pkg/text/template/,如下所示:

如果"范围" action初始化变量,变量设置为迭代的连续元素。另外,"范围"可以声明两个变量,用逗号分隔:

$index, $element := pipeline

在这种情况下,$ index和$ element分别设置为数组/切片索引或映射键和元素的连续值。请注意,如果只有一个变量,则为其分配元素;这与Go range子句中的约定相反。 在哪里它建议索引

这表明可以在迭代中获取索引,但我无法弄清楚声明两个变量的范围是什么意思,模板中的变量应该在哪里宣布。

1 个答案:

答案 0 :(得分:11)

请参阅go-nuts邮件列表中的this example。这个技巧的一个关键是模板if与Go语言if不同。与需要布尔值的Go语言不同,模板可以测试零值。然后神奇的是{{if $index}},{{end}},其中$ index除了在赋值中的出现外不需要声明。

相关问题