Go 템플릿 범위 루프의 변수: 반복 시 재설정됩니까?
Go 템플릿에서는 범위 루프 외부에 선언된 변수가 재설정되지 않습니다. 각 반복마다. 그러나 루프 내의 변수에 새 값을 할당하면 문제가 발생합니다.
다음 코드를 고려하세요.
{{ $prevDate := "" }} {{ range $post := .Posts }} {{ if ne $prevDate $post.Date }} <div>
$prevDate를 현재 게시물 날짜와 비교하려는 의도입니다. 게시물이 같은 날에 발생했는지 확인합니다. 그러나 $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}}
위 내용은 각 반복마다 Go 템플릿 범위 루프 변수가 재설정됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!