如何在golang模板中检查非标准对象的等价性

时间:2014-11-07 04:24:03

标签: go gocql

我正在使用html模板输出下拉列表,如下所示:

{{range .Organisations}}
 <option value="{{.Uuid}}">{{.Name}}</option>
{{end}}

我想指出应该通过eq比较器选择其中一个项目。我所知道的唯一可能的复杂因素是.Uuid*gocql.UUID,我正在尝试这样做:

{{range .Organisations}}
 <option value="{{.Uuid}}"{{if eq $.Contact.Organisation .Uuid}} selected="selected"{{end}}>{{.Name}}</option>
{{end}}

但它会导致以下错误消息:

  

page:32:36:执行&#34; submit_scholarship&#34; at:错误调用eq:无效类型进行比较

非常感谢任何正确方向的指示。

1 个答案:

答案 0 :(得分:3)

eq仅适用于基本类型。您可以添加自定义功能来执行此操作。 http://play.golang.org/p/rkYnlqmeLA

package main

import (
    "html/template"
    "os"
)

type s struct {
    Name []byte
    Uuid []byte
}

func main() {
    data := s{[]byte("aa"), []byte("aa")}

    funcMap := template.FuncMap{
        "equals": func(a []byte, b []byte) bool {
            return string(a) == string(b)
        },
    }

    var html = `{{if equals .Name .Uuid }}hi{{end}}`
    tmpl, _ := template.New("test").Funcs(funcMap).Parse(html)

    err := tmpl.Execute(os.Stdout, data)
    if err != nil {
        println(err.Error())
    }

}