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

Susan Sarandon
リリース: 2024-11-12 08:18:02
オリジナル
663 人が閲覧しました

How to Access Parent/Global Pipeline within a Range in Go Templates?

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

問題

範囲パイプライン ({{range Pipeline}} T1 {{ text/template パッケージ内の外側のパイプライン値は、範囲アクションの前に、または Execute() に渡される親/グローバル パイプラインとしてアクセスできます。

作業例

次の例では、範囲パイプライン内の .Path にアクセスしようとしますが、ドットが Files 要素を反復しているため、.Path は利用できません。

package main

import (
    "os"
    "text/template"
)

// .Path won't be accessible, because dot will be changed to the Files element
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"}})
}
ログイン後にコピー

Solutions

$ 変数の使用 (推奨)

テキスト/テン​​プレートのドキュメントによると、実行開始時に $ は Execute() に渡されるデータ引数に設定され、これが開始値になります。ドットの。これは、$.Path を使用して外側スコープの .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 テンプレートの範囲内の親/グローバル パイプラインにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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