Go模板中的struct方法通常与公共结构属性的方式相同,但在这种情况下它不起作用:http://play.golang.org/p/xV86xwJnjA
{{with index . 0}}
{{.FirstName}} {{.LastName}} is {{.SquareAge}} years old.
{{end}}
错误:
executing "person" at <.SquareAge>: SquareAge is not a field
of struct type main.Person
同样的问题:
{{$person := index . 0}}
{{$person.FirstName}} {{$person.LastName}} is
{{$person.SquareAge}} years old.
相反,这有效:
{{range .}}
{{.FirstName}} {{.LastName}} is {{.SquareAge}} years old.
{{end}}
如何在{{with}}和{{$ person}}示例中调用SquareAge()方法?
答案 0 :(得分:8)
如先前在Call a method from a Go template中所述,
定义的方法func (p *Person) SquareAge() int {
return p.Age * p.Age
}
仅适用于*Person
类型。
由于您不会在Person
方法中改变SquareAge
对象,因此您可以将接收方从p *Person
更改为p Person
,这样就可以了与你以前的切片。
或者,如果您替换
var people = []Person{
{"John", "Smith", 22},
{"Alice", "Smith", 25},
{"Bob", "Baker", 24},
}
与
var people = []*Person{
{"John", "Smith", 22},
{"Alice", "Smith", 25},
{"Bob", "Baker", 24},
}
它也会起作用。