Go テンプレートの有効なフィールドのテスト
Go のデータベース/SQL パッケージでは、Null[Type] 構造体を使用してデータベース値をコードにマッピングすることが容易になります。ヌルサポート。ただし、フィールドが無効であるかどうか (つまり、Valid プロパティが false である場合) をテストすると、いくつかの課題が生じます。
SQL フィールドを表示する推奨される方法は、次のような .Value プロパティを使用することです。
{{ .MyStruct.MyField.Value }}
値の比較を伴うより複雑なシナリオの場合、.MyField が Valid でない場合、このアプローチは失敗し、「比較するタイプが無効です」エラーが発生する可能性があります。最初は、比較を行う前に .MyField が nil かどうかをテストするのが簡単な解決策のように思えます。ただし、このメソッドは同じエラーで失敗します。
Go テンプレートの and 関数は、そのような状況を処理できる必要があります。ただし、以前の Go バージョン (1.18 未満) では、ショートサーキット評価は行われず、すべての引数が常に評価されます。したがって、 $.MyStruct.MyField が nil の場合に条件が false と評価される場合でも、 eq $.MyStruct.MyField.Value は次のようになります。式は引き続き評価され、エラーが発生します。
この問題を解決するには、複数の {{if}} アクションを使用できます。
{{if $.MyStruct.MyField}} {{if eq $.MyStruct.MyField.Value .}}selected="selected"{{end}} {{end}}
あるいは、{{with} を利用することもできます。
<select name="y"> {{range $idx, $e := .SomeSlice}} <option value="{{.}}" {{with $.MyStruct.MyField}} {{if eq .Value $e}}selected="selected"{{end}} {{end}}>{{.}}</option> {{end}} </select>
さらに、sql.NullXX 型は nil にできない構造体値であるため、Value() メソッドかどうかを判断するには、Valid フィールドをチェックすることが不可欠です。 nil 以外の値を返します:
{{if $.MyStruct.MyField.Valid}} {{if eq $.MyStruct.MyField.Value .}}selected="selected"{{end}} {{end}}
これらのテクニックを使用すると、有効なフィールドの存在を効果的にテストし、Go テンプレートでそれらの値を比較できます。
以上がGo テンプレートの `sql.Null[Type]` フィールドの値を安全に比較する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。