В Го у меня есть map[string]int
. Я хочу отображать значения с этой карты через шаблон из пакета text/template
. Если карта не содержит определенного значения, я хочу вместо этого отобразить «н/д». Это то, что я пробовал:
{{with index $.MyMap .MyKey}}{{.}}{{else}}n/a{{end}}
К сожалению, это не работает, если карта содержит значение для моего ключа, но значение равно 0. Тогда также отображается «н/д». Как я могу убедиться, что «н/д» отображается только в том случае, если карта не содержит запрошенного значения?
Вы можете создать функцию шаблона, которая возвращает значение «нет», если ключ не существует.
funcMap := template.FuncMap{
"GetValue": func(m map[string]int, key string) string {
if value, ok := m[key]; ok {
return fmt.Sprintf("%d", value)
}
return "n/a"
},
}
В вашем шаблоне вы можете вызвать функцию GetValue. Например -
tmpl := `{{- $key1 := "one" -}}
{{- $key2 := "four" -}}
Value for '{{ $key1 }}': {{ GetValue . $key1 }} \n
Value for '{{ $key2 }}': {{ GetValue . $key2 }}`
Выход:
Value for 'one': 1 /n
Value for 'four': n/a
Вам необходимо реализовать собственную функцию индексации, которая по-разному обрабатывает эти два случая.