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

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

Barbara Streisand
リリース: 2024-11-10 18:34:02
オリジナル
214 人が閲覧しました

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

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