首頁 >後端開發 >Golang >如何在 Go 模板之間傳遞多個值?

如何在 Go 模板之間傳遞多個值?

Linda Hamilton
Linda Hamilton原創
2024-12-04 16:33:10357瀏覽

How to Pass Multiple Values Between Go Templates?

在 Go 範本之間傳遞多個值

使用 Go 範本時,可能需要在範本之間傳遞多個值。但是,text/template 包的 {{template}} 操作僅支援傳遞單一可選資料值。這就提出瞭如何有效地傳輸多個資料元素的問題。一種方法是將資料合併為單一值。 Go 提供了兩種選擇:將資料包裝到結構體或利用映射。

包裝到結構體

一種方法是建立一個結構體來封裝您想要傳輸的資料。然後可以將該結構傳遞給模板並與點表示法一起使用來存取模板中的各個資料元素。以下是範例:

type DataWrapper struct {
    Shops      []Destination
    CityName   string
    RegionName string
}

包裝到 Map

如果使用結構體不方便,您也可以將資料包裝到簡單的 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中文網其他相關文章!

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