为了账号安全,请及时绑定邮箱和手机立即绑定

html模板中的golang乘法算法

html模板中的golang乘法算法

Go
MYYA 2021-12-07 17:11:13
我是 golang 的新手。我在 html/template 中使用乘法时遇到了一个问题。一些代码如下。模板代码: {{range $i,$e:=.Items}}      <tr>           <td>{{add $i (mul .ID .Number)}}</td>           <td>{{.Name}}</td>      </tr>  {{end}}.go 代码type Item struct{        ID int        Name string    }func init() {    itemtpl,_:=template.New("item.gtpl").        Funcs(template.FuncMap{"mul": Mul, "add": Add}).        ParseFiles("./templates/item.gtpl")}func itemHandle(w http.ResponseWriter, req *http.Request) {    items:=[]Item{Item{1,"name1"},Item{2,"name2"}}    data := struct {            Items []Item            Number int            Number2 int        }{            Items:    items,            Number:   5,            Number2:  2,        }        itemtpl.Execute(w, data)}func Mul(param1 int, param2 int) int {    return param1 * param2}func Add(param1 int, param2 int) int {    return param1 + param2}当我使用上面的代码时,它不会输出任何内容。但是当我在下面的数组之外使用代码时,它会输出 10。<html><body>    {{mul .Number .Number2}}</html></body>我谷歌了很多。我找不到像我这样的可用的。我想在 html/template 内的数组中使用乘法。有人可以告诉我我的代码有什么问题吗?
查看完整描述

1 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

template.Execute()返回error,您应该始终检查它。你会这样做吗:

模板:item.gtpl:3:33:在 <.Number> 处执行“item.gtpl”:数字不是结构类型 main.Item 的字段

“问题”是{{range}}将管道(.)更改为当前项目,因此在{{range}}:

{{add $i (mul .ID .Number)}}

.Number将引用您Item类型的字段或方法,因为您正在循环[]Item. 但是您的Item类型没有这样的方法或字段。

使用$.Number将引用“顶级”Number而不是当前Item值的字段:

{{add $i (mul .ID $.Number)}}

Go Playground上尝试修改后的工作代码。

$记录在text/template

当执行开始时,$ 被设置为传递给 Execute 的数据参数,即 dot 的起始值。


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 420 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信