dqnf28092 2014-11-07 04:24
浏览 56
已采纳

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

I am outputting a dropdown list using a html template, as follows:

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

I want to indicate that one of the items should be selected by doing an eq comparator. The only potential complication I am aware of is that the .Uuid is a *gocql.UUID, I am trying to do this:

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

But it results in the following error message:

page:32:36: executing "submit_scholarship" at : error calling eq: invalid type for comparison

Any pointers in the right direction would be much appreciated.

  • 写回答

1条回答 默认 最新

  • dpjjmo3079 2014-11-07 07:12
    关注

    eq only works on basic types. You can add a custom function to do this. 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())
        }
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口