Go 템플릿의 범위 루프 변수 범위
Go 템플릿에서는 범위 루프 내에 선언된 변수가 선언된 변수와 어떻게 상호 작용하는지 이해하는 것이 중요합니다. 루프 외부에 있습니다.
다음 코드를 고려해보세요. snippet:
{{ $prevDate := "" }} {{ range $post := .Posts }} {{ if ne $prevDate $post.Date }} <div>
목표는 현재 게시물의 날짜와 이전 게시물의 날짜를 비교하여 날짜가 변경될 때 섹션 헤더를 표시하는 것입니다. 그러나 $prevDate의 값은 각 반복이 시작될 때 빈 문자열로 재설정되는 것 같습니다.
문제는 범위 루프 내의 변수 범위에 있습니다. 루프가 반복될 때마다 새로운 숨겨진 변수 $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: 게시물 유형 방법
이전 게시물을 가져오려면 게시물 유형에 메소드를 추가하세요. 날짜:
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}}
이러한 솔루션을 사용하면 $prevDate 변수는 범위 루프 반복에서 해당 값을 유지할 수 있습니다. 게시일을 효과적으로 비교할 수 있습니다.
위 내용은 Go 템플릿의 범위 루프에서 변수 범위를 올바르게 관리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!