Go 템플릿 범위 루프에서 변수 재설정
Go HTML 템플릿에서는 반복 작업에서 변수 값을 유지하려고 할 때 일반적인 문제가 발생합니다. 범위 루프. 변수가 루프 외부에서 선언되면 해당 값은 반복할 때마다 재설정되어 의도한 기능을 방해할 수 있습니다.
이 현상을 이해하기 위해 템플릿 범위 루프의 메커니즘을 자세히 살펴보겠습니다. 각 반복은 루프 내에서 다시 선언된 변수가 해당 특정 반복 내에서만 표시되는 자체 범위 내에서 작동합니다. 즉, 루프 외부에 선언된 변수는 반복 내에서 액세스하거나 수정할 수 없습니다.
예를 들어 다음 템플릿을 고려하세요.
{{ $prevDate := "" }} {{ range $post := .Posts }} {{ if ne $prevDate $post.Date }} <div>
처음에는 $prevDate가 이전 게시물의 날짜, if 문에서 비교를 통해 날짜 변경 사항을 식별할 수 있습니다. 그러나 문제는 $prevDate의 반복적인 재선언에 있습니다. 각 반복은 새로운 변수 범위를 생성하여 이전 변수 범위와 효과적으로 격리합니다. 결과적으로 $prevDate는 각 반복이 시작될 때 초기 값 ""으로 재설정됩니다.
해결책을 찾으려면 템플릿 기능이나 외부 구조체에서 제공하는 메서드를 활용할 수 있습니다.
해결책 1: 등록된 템플릿 함수
템플릿 함수를 정의하여 현재 인덱스를 전달할 수 있습니다. 반복을 수행하고 이전 게시물의 날짜를 반환합니다.
func PrevDate(i int) string { if i == 0 { return "" } return posts[i-1].Date }
이 함수는 다음과 같이 템플릿에 등록하고 이후에 사용할 수 있습니다.
{{range $index, $post := .Posts}} {{$prevDate := PrevDate $index}} {{end}}
해결책 2: 외부 구조체 메소드
또는 Posts 유형에 다음을 허용하는 메소드를 추가할 수 있습니다. 이전 게시물 날짜 검색.
type Post struct { // Your Post type Date string } type Posts []Post func (p *Posts) PrevDate(i int) string { if i == 0 { return "" } return (*p)[i-1].Date }
템플릿에서 이 메서드를 다음과 같이 호출할 수 있습니다.
{{range $index, $post := .Posts}} {{$prevDate := $.Posts.PrevDate $index}} {{end}}
두 솔루션 모두 범위 반복에서 변수 값을 유지하는 문제를 효과적으로 해결합니다. Go 템플릿에서 원하는 기능을 활성화합니다.
위 내용은 Go 템플릿 범위 루프에서 변수 재설정을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!