Home  >  Article  >  Backend Development  >  How to Access Nested Struct Fields in HTML Templates in Go?

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

Linda Hamilton
Linda HamiltonOriginal
2024-10-24 07:46:30144browse

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>

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>

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>

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>

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>

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>

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!

Statement:
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