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