ホームページ  >  記事  >  バックエンド開発  >  Go テンプレートの Range アクションで親/グローバル パイプラインにアクセスするにはどうすればよいですか?

Go テンプレートの Range アクションで親/グローバル パイプラインにアクセスするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-10 18:34:02177ブラウズ

How to Access the Parent/Global Pipeline in Go Templates' Range Action?

Go テンプレートの範囲アクションでの親/グローバル パイプラインへのアクセス

Go のテキスト/テン​​プレート パッケージでは、範囲アクションまたは親/グローバル パイプラインが必須です。次の例を考えてみましょう:

const page = `{{range .Files}}<script src="{{html .Path}}/js/{{html .}}"></script>{{end}}`

type scriptFiles struct {
    Path string
    Files []string
}

func main() {
    t := template.New("page")
    t = template.Must(t.Parse(page))

    t.Execute(os.Stdout, &scriptFiles{"/var/www", []string{"go.js", "lang.js"}})
}

この例では、.dot が現在の Files 要素に変換されるため、範囲アクション内では .Path にアクセスすることはできません。

推奨解決策 - $ 変数の使用

テキスト/テン​​プレート パッケージのドキュメントによると、$ 変数は Execute に渡されるデータ引数を保持します。これは .dot の初期値です。したがって、範囲アクションで $.Path を使用して外側スコープのパスにアクセスするには、次のバリエーションを使用します。

const page = `{{range .Files}}<script src="{{html $.Path}}/js/{{html .}}"></script>{{end}}`

代替ソリューション - カスタム変数

前範囲アクションでは、範囲スコープに値を渡すためにカスタム変数を定義できます。例:

const page = `{{$p := .Path}}{{range .Files}}<script src="{{html $p}}/js/{{html .}}"></script>{{end}}`

以上がGo テンプレートの Range アクションで親/グローバル パイプラインにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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