Go에서 맵을 사용할 때 HTML 템플릿의 구조체 필드에 어떻게 액세스합니까?

Susan Sarandon
풀어 주다: 2024-10-24 07:43:29
원래의
538명이 탐색했습니다.

How to Access Struct Fields in HTML Templates when Using Maps in Go?

Go의 html/template을 사용하여 HTML 템플릿의 구조체 필드에 액세스

Go의 html/template 패키지에서는 저장된 구조체의 필드에 액세스할 때 문제가 발생할 수 있습니다. 지도의 값으로. 이 문서에서는 이 문제에 대한 솔루션을 제공하여 템플릿 내에서 구조체의 개별 필드를 검색하고 표시할 수 있습니다.

작업 구조체를 정의하는 다음 예를 고려해 보세요.

<code class="go">type Task struct {
   Cmd string
   Args []string
   Desc string
}</code>
로그인 후 복사
로그인 후 복사

Task 구조체를 값으로, 문자열을 키로 사용하여 맵을 초기화합니다.

<code class="go">var taskMap = map[string]Task{
    "find": Task{
        Cmd: "find",
        Args: []string{"/tmp/"},
        Desc: "find files in /tmp dir",
    },
    "grep": Task{
        Cmd: "grep",
        Args: []string{"foo", "/tmp/*", "-R"},
        Desc: "grep files match having foo",
    },
}</code>
로그인 후 복사
로그인 후 복사

이제 html/template을 사용하여 taskMap 데이터를 사용하여 HTML 페이지를 구문 분석하려고 합니다.

<code class="go">func listHandle(w http.ResponseWriter, r *http.Request) {
    t, _ := template.ParseFiles("index.tmpl")
    t.Execute(w, taskMap)
}</code>
로그인 후 복사

해당 템플릿인 index.tmpl은 다음과 같습니다.

<code class="html"><html>
{{range $k, $v := .}}
   <li>Task Name: {{$k}}</li>
   <li>Task Value: {{$v}}</li>
   <li>Task Description: {{$v.Desc}}</li>
{{end}}
</html></code>
로그인 후 복사

맵에서 $k 및 $v 변수에 액세스하는 것은 예상대로 작동하지만 {{$v.Desc}}를 사용하여 Desc 필드에 액세스하는 데 실패합니다. . 이 문제를 해결하려면 템플릿에서 액세스하려는 필드를 내보내야 합니다. Go에서는 대문자로 시작하는 필드를 내보냅니다.

해결책:

설명 필드를 내보내도록 작업 구조를 수정합니다.

<code class="go">type Task struct {
   Cmd string
   Args []string
   Desc string
}</code>
로그인 후 복사
로그인 후 복사

맵 업데이트 내보낸 설명 필드 사용:

<code class="go">var taskMap = map[string]Task{
    "find": Task{
        Cmd: "find",
        Args: []string{"/tmp/"},
        Desc: "find files in /tmp dir",
    },
    "grep": Task{
        Cmd: "grep",
        Args: []string{"foo", "/tmp/*", "-R"},
        Desc: "grep files match having foo",
    },
}</code>
로그인 후 복사
로그인 후 복사

템플릿에서 내보낸 설명 필드를 참조하도록 구문을 업데이트합니다.

<code class="html">{{range $k, $v := .}}
   <li>Task Name: {{$k}}</li>
   <li>Task Value: {{$v}}</li>
   <li>Task Description: {{$v.Desc}}</li>
{{end}}</code>
로그인 후 복사

다음 단계에 따라 HTML 템플릿의 구조체 필드를 사용하여 Go 지도에 저장된 데이터를 쉽게 표시하고 활용할 수 있습니다.

위 내용은 Go에서 맵을 사용할 때 HTML 템플릿의 구조체 필드에 어떻게 액세스합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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