Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengakses Medan Struktur dalam Templat HTML apabila Menggunakan Peta dalam Go?

Bagaimana untuk Mengakses Medan Struktur dalam Templat HTML apabila Menggunakan Peta dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-10-24 07:43:29540semak imbas

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

Mengakses Medan Struktur dalam Templat HTML dengan html/templat Go

Dalam pakej html/template Go, anda boleh menghadapi cabaran apabila mengakses medan struct yang disimpan sebagai nilai dalam peta. Artikel ini menyediakan penyelesaian kepada masalah ini, membolehkan anda mendapatkan semula dan memaparkan medan individu struct dalam templat anda.

Pertimbangkan contoh berikut, di mana kami mentakrifkan struct Tugas:

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

Kami memulakan peta dengan struct Tugas sebagai nilai dan rentetan sebagai kekunci:

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

Sekarang, kami ingin menghuraikan halaman HTML menggunakan data Peta tugas menggunakan html/template:

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

Berikut ialah templat yang sepadan, 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>

Semasa mengakses pembolehubah $k dan $v daripada peta berfungsi seperti yang diharapkan, mengakses medan Desc menggunakan {{$v.Desc}} gagal . Untuk menyelesaikan masalah ini, kami perlu memastikan bahawa medan yang ingin kami akses dalam templat dieksport. Dalam Go, medan dieksport apabila ia bermula dengan huruf besar.

Penyelesaian:

Ubah suai struct Tugas untuk mengeksport medan Desc:

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

Kemas kini peta dengan medan Desc yang dieksport:

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

Dalam templat, kemas kini sintaks untuk merujuk medan Desc yang dieksport:

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

Dengan mengikuti langkah ini, anda akan dapat mengakses medan struct dalam templat HTML anda, membolehkan anda memaparkan dan menggunakan data yang disimpan dalam peta Go anda dengan mudah.

Atas ialah kandungan terperinci Bagaimana untuk Mengakses Medan Struktur dalam Templat HTML apabila Menggunakan Peta dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn