在Go 中將多個值從一個模板傳遞到另一個模板:綜合指南
如何熟練地將多個值從一個模板傳遞到另一個模板去?考慮提供的上下文:
在main 函數中,我執行了帶有CityWithSomeData 的範本citys.gohtml:
tpl.ExecuteTemplate(resWriter, "cities.gohtml", CityWithSomeData)
在範本中,我的目標是迭代城市和地區以將資料傳遞到另一個範本資料:
{{range .}} {{$city:=.Name}} {{range .Regions}} {{$region:=.Name}} {{template "data" .Shops $city $region}} {{end}} {{end}}
解
根據Go 範本文檔, {{template}}操作的語法允許傳遞只有一個可選資料值。要傳遞多個值,我們需要先將它們封裝成單一值,例如映射或結構體。
由於在範本中編寫 Go 程式碼不可行,因此我們可以註冊一個自訂函數來執行此操作任務:
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中從一個模板到另一個模板。
以上是如何在 Go 模板之間有效率地傳遞多個值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!