英文:
accessing some arbitrary element in array in templates
问题
我需要在模板中访问数组中的某个任意元素。
我有一个返回包含3个元素的数组的函数,我想只访问第二个元素。我该如何做到这一点?
模板代码如下:
测试开始
{{ service "mongodb" }}
测试结束
结果如下:
测试开始
[0xc208062de0 0xc208062d80 0xc208062e40]
测试结束
英文:
I need to access some arbitrary element in array in template.
I have a function that returns an array of 3 elements and I want to access only the second element. How do I do that?
the template:
test start
{{ service "mongodb" }}
test end
results in:
test start
[0xc208062de0 0xc208062d80 0xc208062e40]
test end
答案1
得分: 2
我认为预定义的全局函数index
可以在这里帮到你,可以在template包的文档中找到相关信息。
index
返回将第一个参数按照后续参数进行索引的结果。因此,"index x 1 2 3"在Go语法中表示x[1][2][3]。每个索引项必须是一个map、slice或array。
以下是一个示例:
package main
import (
"log"
"os"
"text/template"
)
func returnArray(dummy string) []int {
return []int{11, 22, 33}
}
func main() {
funcMap := template.FuncMap{
"myFunc": returnArray,
}
const templateText = `
输出 0: {{myFunc "abc"}}
输出 1: {{index (myFunc "abc") 0}}
输出 2: {{index (myFunc "abc") 1}}
输出 3: {{index (myFunc "abc") 2}}
`
tmpl, err := template.New("myFuncTest").Funcs(funcMap).Parse(templateText)
if err != nil {
log.Fatalf("解析模板时出错:%s", err)
}
err = tmpl.Execute(os.Stdout, "")
if err != nil {
log.Fatalf("执行模板时出错:%s", err)
}
}
输出结果:
输出 0: [11 22 33]
输出 1: 11
输出 2: 22
输出 3: 33
英文:
I think predefined global function index
could help here, documentation from package template
index
Returns the result of indexing its first argument by the
following arguments. Thus "index x 1 2 3" is, in Go syntax,
x[1][2][3]. Each indexed item must be a map, slice, or array.
Here is an example;
package main
import (
"log"
"os"
"text/template"
)
func returnArray(dummy string) []int {
return []int{11, 22, 33}
}
func main() {
funcMap := template.FuncMap{
"myFunc": returnArray,
}
const templateText = `
Output 0: {{myFunc "abc"}}
Output 1: {{index (myFunc "abc") 0}}
Output 2: {{index (myFunc "abc") 1}}
Output 3: {{index (myFunc "abc") 2}}
`
tmpl, err := template.New("myFuncTest").Funcs(funcMap).Parse(templateText)
if err != nil {
log.Fatalf("parsing: %s", err)
}
err = tmpl.Execute(os.Stdout, "")
if err != nil {
log.Fatalf("execution: %s", err)
}
}
Output
Output 0: [11 22 33]
Output 1: 11
Output 2: 22
Output 3: 33
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论