> 백엔드 개발 > Golang > Go 템플릿의 범위 루프에서 변수 범위를 올바르게 관리하는 방법은 무엇입니까?

Go 템플릿의 범위 루프에서 변수 범위를 올바르게 관리하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-27 01:14:10
원래의
227명이 탐색했습니다.

How to Properly Manage Variable Scope in Go Templates' Range Loops?

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

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