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

Templates Google Go';中范围最后一个元素的特殊情况处理;s文本模板,templates,go,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")

我正在尝试使用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}})`
到目前为止,我最好的线索可以在下面的陈述中找到:

如果“范围”操作初始化变量,则该变量将设置为迭代的后续元素。此外,“范围”可以声明两个变量,用逗号分隔:

在这种情况下,$index和$element分别设置为数组/切片索引或映射键和元素的连续值。注意,如果只有一个变量,则为其分配元素;这与Go范围条款中的惯例相反。 建议索引


这表明可以在迭代中获得索引,但我无法理解声明两个变量的范围意味着什么,以及这些变量应该在模板中的何处声明。

请参阅go nuts邮件列表。这个技巧的一个关键是,模板
if
不同于Go语言
if
。模板可以测试零的值,这与需要布尔值的Go语言不同。神奇的是,{code>{{if$index}},{{end}其中$index除了在赋值中的外观之外不需要任何声明。

下面是一个工作示例:
$index, $element := pipeline