首頁 >後端開發 >Golang >如何將多個值傳遞給 Go 範本的 {{template}} 操作?

如何將多個值傳遞給 Go 範本的 {{template}} 操作?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-05 20:38:13776瀏覽

How to Pass Multiple Values to Go Templates' {{template}} Action?

在模板之間傳遞多個值

在 Go 模板中, {{template}} 操作僅採用一個可選參數。要傳遞多個值,必須將它們封裝在單一值中。

封裝資料

一種方法是使用接受所需值並傳回一個包裝函數單一值。例如,我們可以為城市和地區資料建立包裝函數:

func Wrap(shops []Destination, cityName, regionName string) map[string]interface{} {
    return map[string]interface{}{
        "Shops":      shops,
        "CityName":   cityName,
        "RegionName": regionName,
    }
}

註冊包裝函數

可以使用 Template.Funcs 註冊自訂函數()。這必須在解析模板之前完成:

t := template.Must(template.New("cities.gohtml").Funcs(template.FuncMap{
    "Wrap": Wrap,
}).Parse(src))

修改模板

然後可以修改模板以調用 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 := []City{
    {
        Name: "CityA",
        Regions: []Region{
            {Name: "CA-RA", Shops: []Destination{{"CA-RA-SA"}, {"CA-RA-SB"}}},
            {Name: "CA-RB", Shops: []Destination{{"CA-RB-SA"}, {"CA-RB-SB"}}},
        },
    },
    {
        Name: "CityB",
        Regions: []Region{
            {Name: "CB-RA", Shops: []Destination{{"CB-RA-SA"}, {"CB-RA-SB"}}},
            {Name: "CB-RB", Shops: []Destination{{"CB-RB-SA"}, {"CB-RB-SB"}}},
        },
    },
}
if err := t.ExecuteTemplate(os.Stdout, "cities.gohtml", CityWithSomeData); err != nil {
    panic(err)
}

輸出:

City: CityA, Region: CA-RA, Shops: [{CA-RA-SA} {CA-RA-SB}]
City: CityA, Region: CA-RB, Shops: [{CA-RB-SA} {CA-RB-SB}]
City: CityB, Region: CB-RA, Shops: [{CB-RA-SA} {CB-RA-SB}]
City: CityB, Region: CB-RB, Shops: [{CB-RB-SA} {CB-RB-SB}]

以上是如何將多個值傳遞給 Go 範本的 {{template}} 操作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn