Google 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/中找到:


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


$index, $element := pipeline

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


这表明可以在迭代中获得索引,但我只是不知道声明两个变量的范围是什么意思,以及这些变量在模板中应声明的位置。


qq_笑_17
浏览 287回答 1
1回答

胡子哥哥

请从go-nuts邮件列表中查看此示例。该技巧的一个关键是模板if不同于Go语言if。模板可以测试零值,这与需要布尔值的Go语言不同。然后{{if $index}},{{end}},神奇的地方是$ index除了在赋值中的出现外无需声明。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go