Golang HTML 템플릿 변수의 범위 제한
Golang의 HTML 템플릿에서 변수는 := 연산자를 사용하여 도입되며 제한된 범위를 갖습니다. 템플릿 내에서. 결과적으로 조건 블록 내의 변수 변경 사항은 조건 블록 외부에서 액세스할 수 없습니다. 이는 단순성을 강조하고 복잡한 논리를 지양하는 Go의 템플릿 디자인 철학으로 설명할 수 있습니다.
가변 범위 제한
text/template 패키지에 명시된 대로 문서:
"변수의 범위는 제어 구조의 '종료' 동작('if', 'with' 또는 'range')가 선언된 위치 또는 그러한 제어 구조가 없는 경우 템플릿의 끝까지."
가변 범위 제약 조건의 예
고려하세요. 다음 템플릿 코드:
{{if .UserData}} {{$currentUserId := .UserData.UserId}} [<a href="#ask_question">Inside {{$currentUserId}}</a>] {{else}} {{$currentUserId := 0}} {{end}} [<a href="#ask_question">outside {{$currentUserId}}</a>]
{{if}} 블록 내에서 새 변수 {{$currentUserId}}가 도입되어 기존 항목을 섀도잉합니다. 범위가 블록으로 제한되어 조건부 경계 밖에서는 액세스할 수 없습니다.
가능한 해결 방법
1. 변수 액세스를 위한 사용자 정의 함수:
효과적인 접근 방식은 UserData가 있으면 사용자 ID를 반환하고 그렇지 않으면 0을 반환하는 사용자 정의 함수 "CurrentUserId()"를 만드는 것입니다. 이 함수는 템플릿에 등록할 수 있습니다. Funcs() 메소드를 사용합니다.
func main() { m := map[string]interface{}{} t := template.Must(template.New("").Funcs(template.FuncMap{ "CurrentUserId": func() int { if u, ok := m["UserData"]; ok { return u.(UserData).UserId } return 0 }, }).Parse(src)) }
2. 시뮬레이션된 변경 가능 변수:
사용자 정의 함수도 변경 가능 변수를 시뮬레이션할 수 있습니다. 템플릿 데이터로 전달된 맵에 저장된 값을 수정하는 "SetCurrentUserId()"를 고려하세요.
func main() { m := map[string]interface{}{} t := template.Must(template.New("").Funcs(template.FuncMap{ "SetCurrentUserId": func(id int) string { m["CurrentUserId"] = id return "" }, }).Parse(src)) }
이러한 해결 방법을 활용하면 Golang HTML 템플릿의 변수 범위 제한을 극복하여 더 나은 유연성을 보장할 수 있습니다. 용도가 다양합니다.
위 내용은 Golang HTML 템플릿에서 가변 범위는 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!