Go テンプレートの使用: グローバル変数の作成と変更
Go テンプレートは、動的 HTML を生成するための再利用可能なコード フラグメントを作成するための便利な機能を提供します。テンプレートを使用するときに遭遇する一般的な課題の 1 つは、テンプレートの異なるセクション間でグローバル変数を定義および変更できないことです。
問題: スコープが制限されたグローバル変数
次の HTML テンプレートを考えてみましょう:
{{if .UserData}} {{$currentUserId := .UserData.UserId}} [<a href="#ask_question">Inside {{$currentUserId}}</a>] {{else}} {{$currentUserId := 0}} {{end}} [<a href="#ask_question">outside {{$currentUserId}}</a>]
if 条件内で、テンプレートは、UserData 属性に基づいて割り当てられた値を持つローカル変数 $currentUserId を定義します。ただし、この変数のスコープは if ブロックに制限されていますが、外部からもアクセスできるようにしたいと考えています。
解決策: 変数の定義と変更
Go テンプレートでグローバル変数を使用するには、代入演算子 :=.
{{$currentUserId := 0}}
を使用します。変数の値を変更するには、代入演算子 =.
{{$currentUserId = .UserData.UserId}}
を使用します。変数を定義することにより、 if ブロックの外側でブロック内で変更すると、$currentUserId への変更は if ブロックの後も保持されます。
たとえば、次のコードは、if ブロックの前後に追加のロジックを追加します。
{{$currentUserId := 0}} Before: {{$currentUserId}} {{if .UserData}} {{$currentUserId = .UserData.UserId}} [<a href="#ask_question">Inside {{$currentUserId}}</a>] {{else}} {{$currentUserId = 0}} {{end}} After: {{$currentUserId}}
UserData が存在する場合と存在しない場合の両方で、$currentUserId 変数が正しく更新され、if ブロックの外側でアクセスできるようになりました。
その他のアプローチ
グローバル変数の使用に加えて、次のことも検討できます。
以上がGo テンプレートでグローバル変数を定義および変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。