ホームページ > バックエンド開発 > Golang > Go テンプレート間で複数の値を効率的に渡すにはどうすればよいですか?

Go テンプレート間で複数の値を効率的に渡すにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-09 14:09:16
オリジナル
303 人が閲覧しました

How to Efficiently Pass Multiple Values Between Go Templates?

Go でテンプレートからテンプレートに複数の値を渡す: 総合ガイド

Go で 1 つのテンプレートから別のテンプレートに複数の値を上手に転送するにはどうすればよいですか行く?指定されたコンテキストを考慮します。

  • City struct: {ID int, Name string, Regionals []Region}
  • Region struct: {ID int, Name string, Shops []Destination, Masters []Master、EducationCenters []Destination}

main 関数で、私はCityWithSomeData:

tpl.ExecuteTemplate(resWriter, "cities.gohtml", CityWithSomeData)
ログイン後にコピー

を使用してテンプレート city.gohtml を実行します。テンプレート内で、都市と地域を反復してデータを別のテンプレート データに渡すことを目的としています:

{{range .}}
        {{$city:=.Name}}
            {{range .Regions}}
                      {{$region:=.Name}}
                      {{template "data" .Shops $city $region}}
            {{end}}
{{end}}
ログイン後にコピー

ソリューション

Go テンプレートのドキュメントによると、 {{template}} アクションでは、オプションのデータ値を 1 つだけ渡すことができます。複数の値を渡すには、まずそれらをマップや構造体などの単一の値にカプセル化する必要があります。

テンプレート内に Go コードを記述することは現実的ではないため、これを実行するカスタム関数を登録できます。 task:

func Wrap(shops []Destination, cityName, regionName string) map[string]interface{} {
    return map[string]interface{}{
        "Shops":      shops,
        "CityName":   cityName,
        "RegionName": regionName,
    }
}
ログイン後にコピー

カスタム関数は Template.Funcs() を使用して登録されます。次に、Wrap() 関数を呼び出すようにテンプレートを変更します。

{{define "data"}}
    City: {{.CityName}}, Region: {{.RegionName}}, Shops: {{.Shops}}
{{end}}
{{- range . -}}
        {{$city:=.Name}}
        {{- range .Regions -}}
              {{$region:=.Name}}
              {{- template "data" (Wrap .Shops $city $region) -}}
        {{end}}
{{- end}}
ログイン後にコピー

最後に、これらの概念を示すサンプル コードです。

t := template.Must(template.New("cities.gohtml").Funcs(template.FuncMap{
    "Wrap": Wrap,
}).Parse(src))
CityWithSomeData = [...cities]
if err := t.ExecuteTemplate(os.Stdout, "cities.gohtml", CityWithSomeData); err != nil {
    panic(err)
}
ログイン後にコピー

このアプローチにより、複数の値を効率的に渡すことができます。 Go で 1 つのテンプレートから別のテンプレートへ。

以上がGo テンプレート間で複数の値を効率的に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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