В пакете базы данных / sql Go есть несколько структур Null [Type], которые помогают отображать значения базы данных (и их возможные значения NULL) в код. Я пытаюсь выяснить, как проверить, имеет ли значение struct field значение null, или, другими словами, когда его свойство Valid имеет значение false.
Рекомендованным способом печати поля SQL является использование свойства .Value, например:
<div>{{ .MyStruct.MyField.Value }}</div>
Это прекрасно работает.
Но предположим, что у меня есть что-то более сложное, где мне нужно проверить значение по сравнению с чем-то другим, например:
<select name="y">
{{ range .SomeSlice }}
<option value="{{ . }}" {{ if eq $.MyStruct.MyField.Value .}}selected="selected"{{ end }}>{{ . }}</option>
{{ end }}
</select>
Как это случается, это тоже прекрасно работает, если только .MyField не является допустимым, и в этом случае я получаю ошибку "ошибка вызова eq: invalid type для сравнения". Ошибка имеет смысл, потому что Go не может сравнивать нулевое поле с другим значением (или чем-то подобным).
Я бы подумал, что «легким» решением было бы сначала проверить, является ли Значение ноль, а затем сравнить его с тем, что мне нужно, например:
<select name="y">
{{ range .SomeSlice }}
<option value="{{ . }}" {{ if and ($.MyStruct.MyField) (eq $.MyStruct.MyField.Value .)}}selected="selected"{{ end }}>{{ . }}</option>
{{ end }}
</select>
В этом случае я получаю ту же «ошибку вызова eq: неверный тип для сравнения». Я думаю, это означает, что .MyField «существует», хотя значение .MyField не является допустимым. Итак, я попробовал полдюжины других версий, в основном с той же ошибкой, например:
<select name="y">
{{ range .SomeSlice }}
<option value="{{ . }}" {{ if and ($.MyStruct.MyField.Valid) (eq $.MyStruct.MyField.Value .)}}selected="selected"{{ end }}>{{ . }}</option>
{{ end }}
</select>
На данный момент, я понимаю, что я действительно не понимаю, как проверить наличие действительного поля вообще. Буду признателен за любую помощь.
Спасибо.