スライス要素と比較するときに Golang テンプレートで Null 値を処理するにはどうすればよいですか?

DDD
リリース: 2024-10-25 12:35:03
オリジナル
229 人が閲覧しました

How to Handle Null Values in Golang Templates when Comparing with Slice Elements?

Golang テンプレートでの Null 値の処理

シナリオ

Golang のデータベース/SQL パッケージでは、Null[Type] 構造体がデータベース値とその可能な値の処理に役立ちますNULL 値。ただし、NULL 値のテストは困難な場合があります。 .Value を使用して SQL フィールドを出力するのは簡単ですが、より複雑なシナリオで値に対して評価すると問題が発生する可能性があります。

問題

次のテンプレート コードを検討してください:

<select name="y">
   {{ range .SomeSlice }}
       <option value="{{ . }}" {{ if eq $.MyStruct.MyField.Value .}}selected="selected"{{ end }}></option>
   {{ end }}
</select>
ログイン後にコピー

このコードは、$.MyStruct.MyField.Value と .. の同等性に基づいて選択された属性を設定しようとします。ただし、.MyField が Valid でない場合、エラーが発生します。

Solution

この問題には 2 つの解決策があります。

ネストされた 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>
ログイン後にコピー

注:

Null[Type] 構造体は非 nil であるため、Valid フィールドをチェックして、Value() が非 nil 値を返すかどうかを判断します。

{{if $.MyStruct.MyField.Valid}}
    {{if eq $.MyStruct.MyField.Value .}}selected="selected"{{end}}
{{end}}
ログイン後にコピー

以上がスライス要素と比較するときに Golang テンプレートで Null 値を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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