英文:
nest if condition within a range in golang templates
问题
如何在Go语言的范围迭代循环中使用if条件?
package main
import "os"
import "text/template"
const t = `{{range $i, $v := .}}{{$i}} {{$v}}{{if $i gt 0}}, {{end}}
{{end}}
`
func main() {
d := []string{"a", "b", "c"}
template.Must(template.New("").Parse(t)).Execute(os.Stdout, d)
}
在上述代码中,我们使用了Go语言的文本模板包(text/template
)来执行模板渲染。模板字符串中的range
语句用于迭代切片d
中的元素。在每次迭代中,我们使用{{$i}}
和{{$v}}
分别表示当前元素的索引和值。
在模板字符串中,我们使用了{{if $i gt 0}}
条件语句来判断当前元素的索引是否大于0。如果满足条件,则输出一个逗号。这样可以在输出结果中,只在索引大于0的元素之间添加逗号。
最后,我们通过template.Must
函数来解析和执行模板,并将结果输出到标准输出(os.Stdout
)。
英文:
How to use an if condition within a range iteration loop in go?
package main
import "os"
import "text/template"
const t = `{{range $i, $v := .}}{{$i}} {{$v}}{{if $i gt 0}}, {{end}}
{{end}}
`
func main() {
d := []string{"a", "b", "c"}
template.Must(template.New("").Parse(t)).Execute(os.Stdout, d)
}
答案1
得分: 3
如果你检查从Execute
返回的错误,你会发现模板试图向非函数$i
传递参数。正确的语法是:
const t = `{{range $i, $v := .}}{{$i}} {{$v}}{{if gt $i 0}}, {{end}}
{{end}}
`
参数跟在函数gt
之后。函数gt
不是中缀运算符。
如果你的目标是打印逗号分隔的列表,那么可以这样写:
const t = `{{range $i, $v := .}}{{if $i}},
{{end}}{{$i}} {{$v}}{{end}}
`
英文:
If you check the error returned from Execute
, you will find that the template is attempting to pass arguments to the non-function $i. The correct syntax is:
const t = `{{range $i, $v := .}}{{$i}} {{$v}}{{if gt $i 0}}, {{end}}
{{end}}
`
The arguments follow the function gt
. The function gt
is not an infix operator.
If your goal is to print a comma separated list, then write it like this:
const t = `{{range $i, $v := .}}{{if $i}},
{{end}}{{$i}} {{$v}}{{end}}
`
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论