我看到过类似的问题,但找不到解决我问题的方法。
我有一个自定义的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
,这是什么问题?
答案 0 :(得分:-1)
您的data
结构似乎未导出。
这样做:
type Data struct {
}