从golang模板调用数组的方法

问题描述 投票:1回答:1

所以在我的main.go中我有一个结构和方法,我可以从main.go内部调用而没有问题。想象一下它是这样的:

type Test struct {
    val1 float32
    val2 float32
}

func (t Test) callMethod() float32 {
    return t.val1 / t.val2
}

我正在调用这样的模板,作为数据,我给出了一个Test结构的数组,如下所示:

var testvar1 Test
var testvar2 Test
var teststructs [] Test
teststructs = append(teststructs, testvar1)
teststructs = append(teststructs, testvar2)
tpl.ExecuteTemplate(w, "testpage.gohtml", teststructs)

在模板内我试图像这样调用callMethod

{{range .}}
    {{ .callMethod }}
{{end}}

但是我收到以下错误:

在<.callMethod>执行“testpage.gohtml”:无法在main.Test类型中计算字段callMethod

有没有人知道我做错了什么,并有一个解决方案吗?我试图解决它,因为很多小时,我在这一点上非常沮丧。

arrays templates go methods go-templates
1个回答
0
投票

您的Teststruct没有导出的字段/方法,即模板中使用的结构中的字段/方法必须以大写字母开头。

将方法名称更新为CallMethod

func (t Test) CallMethod() float32 {
    return t.val1 / t.val2
}

和模板:

const tmpl = `
{{range .}}
   {{.CallMethod}}
{{end}}
`

看到代码https://play.golang.org/p/Vud7ipJ_Vyr

© www.soinside.com 2019 - 2024. All rights reserved.