>백엔드 개발 >Golang >각 반복마다 Go 템플릿 범위 루프 변수가 재설정됩니까?

각 반복마다 Go 템플릿 범위 루프 변수가 재설정됩니까?

DDD
DDD원래의
2024-12-21 02:20:10883검색

Do Go Template Range Loop Variables Reset on Each Iteration?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.