Как проверить нестандартную эквивалентность объекта в шаблоне Голанга

Я выводить раскрывающийся список с использованием шаблона 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}}

Но это приводит к следующему сообщению об ошибке:

страница:32:36: выполнить "submit_scholarship" at: ошибка вызова eq: недопустимый тип для сравнения

Любые указатели в правильном направлении будут высоко оценены.

1 ответ

Решение

Эквивалент работает только на основных типах. Вы можете добавить пользовательскую функцию для этого. 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())
    }

}
Другие вопросы по тегам