我见过类似的问题,但找不到解决我问题的方法。
我有一个自定义的Money
类型,它使用将值格式化为字符串的函数将int64作为别名:
type Money int64
func (m *Money) Format() string {
abs := math.Abs(int64(*m))
dollars := int64(abs) / 100
cents := int64(abs) % 100
sign := ""
if *m < 0 {
sign = "-"
}
return fmt.Sprintf("%s$%d.%0.2d", sign, dollars, cents)
}
我有一个传递数据结构的HTML模板。该结构上有一个发票项目列表,每个发票项目都有一个“钱”字段,另一个有“钱”字段来保存总计。
type InvoiceItem {
// ...
Cost money.Money
}
type data struct {
Name string
Items []*model.InvoiceItem
StartDate time.Time
EndDate time.Time
Total money.Money
}
我将
data
传递给我的模板并执行它:t := template.Must(template.New(title).Parse(templateString))
t.Execute(&buf, data)
在我的模板中,我覆盖发票项目,并在
Format
对象上调用Money
函数。这有效:{{range .Items}}
<tr>
<td>{{.Description}}</td>
<td>{{.Cost.Format}}</td>
</tr>
{{end}}
稍后,我尝试打印总字段:
<td><strong>{{ .Total.Format }}</strong></td>
我的模板抛出错误:
... executing "Invoice Items" at <.Total.Format>: can't evaluate field Format in type money.Money
为什么当我在发票项目列表上方时,可以在
Format
字段上调用Money
,但是却不能在data.Total
对象上调用它?从错误消息看来,模板知道Total
的类型是Money
,那是什么问题呢? 最佳答案
看来您的data
结构未导出。
做这个:
type Data struct {
}