templates - Google 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")
    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 分别设置为数组/slice 索引或映射键和元素的连续值。注意,如果只有一个变量,则为其分配元素;这与 Go range 子句中的约定相反。 其中建议索引

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

最佳答案

参见this example来自疯狂邮件列表。这个技巧的一个关键是模板 if 与 Go 语言 if 不同。模板可以测试零值,这与需要 bool 值的 Go 语言不同。神奇的是 {{if $index}},{{end}} 其中 $index 除了出现在赋值中之外不需要任何声明。

关于templates - Google Go 文本模板中范围最后一个元素的特殊情况处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65629942/

相关文章:

c++ - 第一个归因的段错误(C++ 中的类)

django - 不带过滤器的输出时区感知 django 日期时间字段

Go打包多个文件,如何构造

pointers - Golang 重用内存地址从 slice 复制?

go - 如何使查询结果结构与我在 GORM Select 上声明的结构相匹配

c++ - 模板参数隐藏

templates - 戈朗。如何使用 html/template 包创建循环函数

c++ - 奇怪的 g++ 编译器在模板函数中对 typeid 的行为

bash - 安装go并设置路径后,仍然出现错误

performance - 为什么我的 GAE 应用程序提供静态文件的延迟如此之高?