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