Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah saya boleh Mengakses Skop Luar dalam Templat Bersarang dalam Go?

Bagaimanakah saya boleh Mengakses Skop Luar dalam Templat Bersarang dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-15 11:38:02741semak imbas

How can I Access the Outer Scope within Nested Templates in Go?

Mengakses Skop Luar dalam Templat Bersarang

Apabila bekerja dengan templat bersarang dalam Go, mengakses skop luar dari dalam "dengan" atau " julat" boleh menimbulkan cabaran kerana skop pembolehubah titik (.) yang diubah. Untuk menangani perkara ini, pembolehubah khas $ boleh digunakan untuk mengakses skop panggilan.

Pertimbangkan contoh berikut:

type MyData struct {
  OuterValue string
  InnerValue string
}

func main() {
  data := MyData{OuterValue: "Outer Value", InnerValue: "Inner Value"}
  template.Must(template.New("example").Parse("{{with .Inner}} Outer: {{$.OuterValue}}, Inner: {{.InnerValue}} {{end}}")).Execute(writer, data)
}

Dalam contoh ini, skop "dengan" mengubah skop pembolehubah titik (.) untuk merujuk kepada nilai "Dalam" struct MyData. Walau bagaimanapun, kami masih perlu mengakses "OuterValue" dari dalam skop "dengan".

Untuk mencapai ini, kami menggunakan pembolehubah $. $ mewakili hujah data yang dihantar ke templat semasa pelaksanaan, yang sama dengan nilai permulaan pembolehubah titik (.). Dengan menggunakan $, kami boleh mengakses skop panggilan dari dalam skop "dengan" atau "julat" bersarang.

Kod berikut menunjukkan penggunaan $:

$ is documented in the text/template docs:

> When execution begins, $ is set to the data argument passed to Execute, that is, to the starting value of dot.

Atas ialah kandungan terperinci Bagaimanakah saya boleh Mengakses Skop Luar dalam Templat Bersarang 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