使用 Go 範本時,可能需要在範本之間傳遞多個值。但是,text/template 包的 {{template}} 操作僅支援傳遞單一可選資料值。這就提出瞭如何有效地傳輸多個資料元素的問題。一種方法是將資料合併為單一值。 Go 提供了兩種選擇:將資料包裝到結構體或利用映射。
一種方法是建立一個結構體來封裝您想要傳輸的資料。然後可以將該結構傳遞給模板並與點表示法一起使用來存取模板中的各個資料元素。以下是範例:
type DataWrapper struct { Shops []Destination CityName string RegionName string }
如果使用結構體不方便,您也可以將資料包裝到簡單的 Map 中。映射鍵將表示資料元素名稱,映射值將是實際資料值。以下是一個範例:
func Wrap(shops []Destination, cityName, regionName string) map[string]interface{} { return map[string]interface{}{ "Shops": shops, "CityName": cityName, "RegionName": regionName, } }
將資料包裝到結構體或映射中後,您可以使用自訂函數將此資料傳遞到範本。可以使用 Template.Funcs() 方法註冊自訂函數,並且必須在解析模板文字之前執行此操作。以下是使用自訂函數傳遞資料的範例:
const src = ` {{define "data"}} City: {{.CityName}}, Region: {{.RegionName}}, Shops: {{.Shops}} {{end}} {{- range . -}} {{$city:=.Name}} {{- range .Regions -}} {{$region:=.Name}} {{- template "data" (Wrap .Shops $city $region) -}} {{end}} {{- end}}`
透過將資料結構化為單一值並利用自訂函數,您可以有效地在Go 範本之間傳遞多個值。這使您能夠在模板的不同部分之間有效地共享複雜的資料結構,從而增強 Go Web 應用程式的靈活性和可維護性。
以上是如何在 Go 模板之間傳遞多個值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!