Go html/template使用call调用方法时出现参数数量错误问题
问题原因与解决方法
你的错误出在两个地方:
不必要使用
call函数:Go模板支持直接调用带参数的方法,不需要用call包裹,call主要用于调用无接收者的普通函数,或是需要显式传递接收者的场景。链式调用的解析问题:你原来的模板里
.SalesStock能正常获取Stock实例,是因为模板会自动调用无参数方法;但链式写.SalesStock.DisplaySize时,模板不会先自动调用SalesStock方法,而是把.SalesStock当成了方法本身(func() Stock类型),这个方法类型并没有DisplaySize方法,最终导致参数数量不匹配的错误。
正确写法有两种:
链式调用加括号:用括号确保先调用
SalesStock方法得到Stock实例,再调用其DisplaySize方法:{{ (.SalesStock).DisplaySize "size" }}先赋值变量再调用:更清晰的方式是先把Stock实例存到变量里,再调用方法:
{{ $stock := .SalesStock }} {{ $stock.DisplaySize "size" }}
这两种写法都能正确触发SalesStock方法获取Stock实例,再调用带参数的DisplaySize方法,解决参数不匹配的问题。
内容的提问来源于stack exchange,提问作者ancient geek
相关产品推荐
相关产品推荐

