Go テンプレートの `sql.Null[Type]` フィールドの値を安全に比較する方法

Patricia Arquette
リリース: 2024-10-28 05:36:30
オリジナル
472 人が閲覧しました

How to  Safely Compare Values from  `sql.Null[Type]` Fields in Go Templates?

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="{{.}}&quot; {{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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!