>백엔드 개발 >Golang >Go 템플릿의 {{template}} 작업에 여러 값을 전달하는 방법은 무엇입니까?

Go 템플릿의 {{template}} 작업에 여러 값을 전달하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-05 20:38:13769검색

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으로 문의하세요.