ホームページ  >  記事  >  バックエンド開発  >  スライス要素と比較するときに Golang テンプレートで Null 値を処理するにはどうすればよいですか?

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

DDD
DDDオリジナル
2024-10-25 12:35:03214ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。