Golang html/template “错误数量的参数想要 1 得到 0”在模板中使用“call”

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

我正在开发 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 新手。

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

内置

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
© www.soinside.com 2019 - 2024. All rights reserved.