Go テンプレートでグローバル変数を定義および変更するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-20 15:32:16
オリジナル
828 人が閲覧しました

How Can I Define and Modify Global Variables in Go Templates?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート