How to Access Nested Struct Fields in HTML Templates in Go?

Linda Hamilton
Release: 2024-10-24 07:46:30
Original
143 people have browsed it

How to Access Nested Struct Fields in HTML Templates in Go?

How to Access Struct Fields of Map Elements in HTML Templates in Go

This article addresses the issue of retrieving struct fields from map elements within HTML templates using the html/template package in Go.

Consider the following Task struct:

<code class="go">type Task struct {
   Cmd string
   Args []string
   Desc string
}</code>
Copy after login
Copy after login

Furthermore, a map is initialized with Task structs as values and strings as keys:

<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>
Copy after login

Now, let's examine the issue at hand. A template is being used to parse an HTML page:

<code class="go">func listHandle(w http.ResponseWriter, r *http.Request){
    t, _ := template.ParseFiles("index.tmpl")
    t.Execute(w, taskMap)
}</code>
Copy after login

The following code snippet represents the index.tmpl template:

<code class="html"><html>
{{range $key, $value := .}}
   <li>Task Name:        {{$key}}</li>
   <li>Task Value:       {{$value}}</li>
   <li>Task description: {{$value.Desc}}</li>
{{end}}
</html></code>
Copy after login
Copy after login

This approach successfully outputs the map's keys and values, but attempts to access the Task fields within the template, for example using {{$value.Desc}}, result in errors.

The solution lies in exporting the fields you wish to access within the templates. This can be achieved by capitalizing the first letter of the field names:

<code class="go">type Task struct {
   Cmd string
   Args []string
   Desc string
}</code>
Copy after login
Copy after login

Consequently, references to field names within the template must also be capitalized:

<code class="html"><html>
{{range $key, $value := .}}
   <li>Task Name:        {{$key}}</li>
   <li>Task Value:       {{$value}}</li>
   <li>Task description: {{$value.Desc}}</li>
{{end}}
</html></code>
Copy after login
Copy after login

By following these steps, you can successfully retrieve and display the Desc field of each Task in the template.

The above is the detailed content of How to Access Nested Struct Fields in HTML Templates in Go?. For more information, please follow other related articles on the PHP Chinese website!

source:php
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!