在模板中访问数组中的任意元素。

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

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

huangapple
  • 本文由 发表于 2014年12月29日 15:17:33
  • 转载请务必保留本文链接:https://go.coder-hub.com/27684922.html
匿名

发表评论

匿名网友

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

确定