ホームページ  >  記事  >  バックエンド開発  >  短絡せずに Golang テンプレートの有効なフィールドをテストするにはどうすればよいですか?

短絡せずに Golang テンプレートの有効なフィールドをテストするにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-26 05:34:31481ブラウズ

How to Test for Valid Fields in Golang Templates Without Short-Circuiting?

有効なフィールドの Golang テンプレートのテスト

問題:

and template 関数を使用して Golang テンプレート内に有効なフィールドが存在する場合、いくつかの一般的な方法は失敗します。この動作は、&& 演算子とは異なり、 and が短絡評価されないために発生し、nil フィールドを値と比較しようとすると「比較対象の型が無効です」などのエラーが発生します。

解決策:

テンプレート内の と の非短絡評価のため、代替アプローチを採用する必要があります。このシナリオで使用できる 2 つの方法を次に示します。

1.ネストされた if ステートメント:

{{if $.MyStruct.MyField}}
    {{if eq $.MyStruct.MyField.Value .}}selected="selected"{{end}}
{{end}}

このアプローチでは、外側の if ステートメントは $.MyStruct.MyField が存在するかどうかをチェックし、内側の if ステートメントはその Value が目的の値と等しいかどうかをチェックします。これにより、フィールドが nil でない場合にのみ比較が実行されることが保証されます。

2. 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>

with アクションは、ドットを指定された値に設定し、そのフィールドへのアクセスを許可します。この場合、 with アクションを使用して、比較が実行される内部スコープ内の $.MyStruct.MyField フィールドへのアクセスを提供します。

以上が短絡せずに Golang テンプレートの有効なフィールドをテストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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