>  기사  >  백엔드 개발  >  Go 템플릿의 외부 범위에서 변수에 액세스하는 방법은 무엇입니까?

Go 템플릿의 외부 범위에서 변수에 액세스하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-09 03:36:02846검색

How to Access Variables from Outer Ranges in Go Templates?

오류: 중첩 범위가 있는 Go 템플릿의 "유형 Y에서 필드 X를 평가할 수 없습니다"

"평가할 수 없음" 오류 Y 유형의 필드 X(X는 Y의 일부가 아니지만 {{range}} 루프에 갇혔습니다)'라는 오류가 발생합니다. Go 템플릿에서 반복되는 구조체입니다. 이는 중첩된 범위가 있고 외부 범위에 정의된 변수에 액세스하려고 시도할 때 발생할 수 있습니다.

예를 들어 다음 예를 고려하세요.

type User struct {
    Username string
    Password []byte
    Email string
}

func main() {
    users := []User{{"user1", []byte("password"), "user1@example.com"}, {"user2", []byte("password"), "user2@example.com"}}
    renderer.HTML(w, http.StatusOK, "users/index", map[string]interface{}{
        "lang":  "en",
        "users": users,
    })
}

해당 템플릿 파일에서 , 다음 코드는 범위 루프 내의 lang 변수에 액세스하려고 시도합니다.

{{ range .users }}
  <form action="/{{ .lang }}/users" method="POST">
    <input type="text" name="Username" value="{{ .Username }}">
    <input type="text" name="Email" value="{{ .Email }}">
  </form>
{{ end }}

그러나 lang은 User 구조체의 필드가 아니기 때문에 템플릿 엔진은 위에서 언급한 오류를 발생시킵니다. 이 문제를 해결하려면 $ 변수를 사용하여 외부 범위에 정의된 모든 변수가 포함된 현재 컨텍스트에 액세스할 수 있습니다. 업데이트된 템플릿 코드는 다음과 같습니다.

{{ range .users }}
  <form action="/{{ $.lang }}/users" method="POST">
    <input type="text" name="Username" value="{{ .Username }}">
    <input type="text" name="Email" value="{{ .Email }}">
  </form>
{{ end }}

이렇게 하면 lang 변수에 올바르게 액세스하고 원하는 출력이 생성됩니다.

위 내용은 Go 템플릿의 외부 범위에서 변수에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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