「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go HTML テンプレートでグローバル変数のスコープを効果的に管理するにはどうすればよいですか?

Go HTML テンプレートでグローバル変数のスコープを効果的に管理するにはどうすればよいですか?

2024 年 11 月 25 日に公開
ブラウズ:918

How to Effectively Manage Global Variable Scope in Go HTML Templates?

Go テンプレートのグローバル変数のスコープ

Go の html/template パッケージでグローバル変数を作成する場合、スコープの制限を理解することが重要です。パッケージのドキュメントによると、テンプレートで定義された変数の有効範囲は、変数が宣言されている制御構造 (if、with、range など) の終わりまでに制限されています。

ケーススタディ

次の 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 ブロックの内側に現在のユーザー ID を表示し、ブロックの外側に 0 を表示することを目的としています。ただし、$currentUserId.

Assignment

Go を使用したソリューションのスコープが制限されているため、結果は両方の場所で 0 と表示されます。Go 1.11 では、テンプレート変数値の変更のサポートが導入されました。変数を初期化するには、:= を次のように使用します:

{{$currentUserId := 0}}

値を更新するには、= を次のように使用します:

{{$currentUserId = .UserData.UserId}}

if ブロックの外側で定義された変数を変更すると、変更を次のように行うことができます。

代替回避策

グローバル変数の変更が適切でない場合は、次の代替案を検討してください:

  • カスタム関数 ]: 変数を受け入れ、それに値を割り当てるカスタム関数を登録します。この関数をテンプレート内で呼び出して、同様の効果を実現できます。
  • シミュレートされた変更可能な変数: テンプレート データ マップで変数を定義し、その値を変更するカスタム関数を登録します。これにより、テンプレート内で「変更可能な」変数をシミュレートできるようになります。

これらのソリューションを活用すると、Go の html/template パッケージでグローバル変数を作成および変更し、適切な変数スコープを確保し、必要な機能を実現できます。テンプレート。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3