템플릿 간에 여러 값 전달
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!