Heim  >  Artikel  >  Backend-Entwicklung  >  Wie greife ich in Go auf Strukturfelder in HTML-Vorlagen zu, wenn Felder nicht exportiert sind?

Wie greife ich in Go auf Strukturfelder in HTML-Vorlagen zu, wenn Felder nicht exportiert sind?

Susan Sarandon
Susan SarandonOriginal
2024-10-24 07:55:30546Durchsuche

How to Access Struct Fields in HTML Templates in Go When Fields Are Unexported?

So greifen Sie auf Strukturfelder in HTML-Vorlagen in Go zu

Problem

Sie möchten mithilfe von auf die Felder einer in einer Karte gespeicherten Struktur zugreifen html/template-Paket in Go.

Lösung

Die Standard-Go-Vorlagen erlauben keinen Zugriff auf nicht exportierte Felder einer Struktur. Um dies zu ermöglichen, müssen Sie die Felder exportieren, indem Sie den ersten Buchstaben ihrer Namen großschreiben.

Codebeispiel

Struktur mit exportierten Feldern definieren:

<code class="go">type Task struct {
   cmd string
   args []string
   Desc string // Note the capital "D"
}</code>

Karte mit exportierten Strukturen initialisieren:

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

Vorlage analysieren und ausführen:

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

Vorlagendatei:

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

Ausgabe

Die Vorlage kann nun auf die exportierten Felder der Aufgabenstruktur in der Karte zugreifen:

<code class="html"><html>

<li>Task Name:        find</li>
<li>Task Value:       {find [/tmp/] find files in /tmp dir}</li>
<li>Task description: find files in /tmp dir</li>

<li>Task Name:        grep</li>
<li>Task Value:       {grep [foo /tmp/* -R] grep files match having foo}</li>
<li>Task description: grep files match having foo</li>

</html></code>

Das obige ist der detaillierte Inhalt vonWie greife ich in Go auf Strukturfelder in HTML-Vorlagen zu, wenn Felder nicht exportiert sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn