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

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

DDD
풀어 주다: 2024-12-21 02:20:10
원래의
883명이 탐색했습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿