How can I range a slice of array in go template?

huangapple go评论86阅读模式
英文:

How can I range a slice of array in go template?

问题

例如,我想对Fields进行范围选择,但不包括最后一个元素。也许可以这样写:

{{range $Field := $.Fields[:len $Field - 1]}}

我有其他方法吗?谢谢!

英文:

For example, I want to range Fields except the last one element.
Maybe like:

{{range $Field := $.Fields[:len $Field - 1]}}

Do I have some approaches?
Thx!

答案1

得分: 1

内置的模板切片函数几乎可以满足你的需求。缺少的部分是计算新切片的最后一个索引。为此,在模板中添加一个加法函数:

func add(a, b int) int {
    return a + b
}

在解析之前将该函数添加到模板中:

t, err := template.New(name).Funcs(template.FuncMap{"add": add}).Parse(text)

像这样使用该函数:

{{range slice $ 0 (add (len $) -1)}}
    {{.}}
{{end}}

playground示例

英文:

The builtin template slice function almost does what you need. The missing piece is computing the last index of the new slice. To do that, add an addition function to the template:

func add(a, b int) int {
    return a + b
}

Add the function to template before parsing:

 t, err := template.New(name).Funcs(template.FuncMap{"add": add}).Parse(text)

Use the function like this:

  {{range slice $ 0 (add (len $) -1)}}
     {{.}}
  {{end}}

playground example.

huangapple
  • 本文由 发表于 2021年9月12日 01:26:39
  • 转载请务必保留本文链接:https://go.coder-hub.com/69145255.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定