我正在开发 Go!使用 html 模板内置库的应用程序。在我的模板中,可以执行以下操作:
{{range .industries }}
...
<td style="text-align:right">{{ .SalesStock.Size }}</td>
...
{{ end }}
industries
是 Industry
类型的对象的切片。 SalesStock
是 Industry
的方法,并生成类型为 SalesStock
的对象 Stock
,该对象具有字段 Size
。
这段代码运行良好。
代替
Size
,我想调用一个方法来显示 Size
或 Price
字段,具体取决于参数 mode
。
(简化的)方法是
func (stock Stock) DisplaySize(mode string) float32 {
switch mode {
case `price`:
return stock.Size
case `size`:
return stock.Price
default:
panic("unknown display mode requested")
}
}
我将模板中的行替换为:
<td style="text-align:right">{{ call .SalesStock.DisplaySize "size" }}</td>
并收到错误
at <.SalesStock.DisplaySize>: wrong number of args for DisplaySize: want 1 got 0
我做错了什么?
感谢您的任何优惠。我怀疑这个错误是初级的。我是 Go 新手。
内置
call
是调用函数值。你想调用一个方法,只需删除 call
就可以了:
{{ .SalesStock.DisplaySize "size" }}
如果
call
是常规字段(函数类型)并且您想要调用它,则需要 DisplaySize
。
例如:
func main() {
const src = `{{.SalesStock.DisplaySize "size"}}
{{.SalesStock.DisplaySize "price"}}
{{ call .SalesStock.FuncField "Foo"}}`
t := template.Must(template.New("").Parse(src))
p := map[string]any{
"SalesStock": Stock{
Size: 2,
Price: 3,
FuncField: func(param string) string { return param + param },
},
}
err := t.Execute(os.Stdout, p)
if err != nil {
panic(err)
}
}
type Stock struct {
Size float32
Price float32
FuncField func(param string) string
}
func (stock Stock) DisplaySize(mode string) float32 {
switch mode {
case `price`:
return stock.Price
case `size`:
return stock.Size
default:
panic("unknown display mode requested")
}
}
这将输出(在Go Playground上尝试一下):
2
3
FooFoo