html模板中的golang乘法算法

我是 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 内的数组中使用乘法。有人可以告诉我我的代码有什么问题吗?


MYYA
浏览 421回答 1
1回答

皈依舞

template.Execute()返回error,您应该始终检查它。你会这样做吗:模板:item.gtpl:3:33:在 <.Number> 处执行“item.gtpl”:数字不是结构类型 main.Item 的字段“问题”是{{range}}将管道(点,&nbsp;.)更改为当前项目,因此在{{range}}:{{add&nbsp;$i&nbsp;(mul&nbsp;.ID&nbsp;.Number)}}.Number将引用您Item类型的字段或方法,因为您正在循环[]Item.&nbsp;但是您的Item类型没有这样的方法或字段。使用$.Number将引用“顶级”Number而不是当前Item值的字段:{{add&nbsp;$i&nbsp;(mul&nbsp;.ID&nbsp;$.Number)}}在Go Playground上尝试修改后的工作代码。$记录在text/template:当执行开始时,$ 被设置为传递给 Execute 的数据参数,即 dot 的起始值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go