Ralat: "Tidak Dapat Menilai Medan X dalam Jenis Y" dalam Templat Go dengan Julat Bersarang
Ralat "tidak dapat menilai medan X dalam jenis Y (X bukan sebahagian daripada Y tetapi tersekat dalam gelung {{julat}})" berlaku apabila anda cuba mengakses medan yang bukan sebahagian daripada struktur yang diulang dalam templat Go. Ini boleh berlaku apabila anda mempunyai julat bersarang dan cuba mengakses pembolehubah yang ditakrifkan dalam julat luar.
Sebagai contoh, pertimbangkan contoh berikut:
type User struct { Username string Password []byte Email string } func main() { users := []User{{"user1", []byte("password"), "user1@example.com"}, {"user2", []byte("password"), "user2@example.com"}} renderer.HTML(w, http.StatusOK, "users/index", map[string]interface{}{ "lang": "en", "users": users, }) }
Dalam fail templat yang sepadan , kod berikut cuba mengakses pembolehubah lang dalam gelung julat:
{{ range .users }} <form action="/{{ .lang }}/users" method="POST"> <input type="text" name="Username" value="{{ .Username }}"> <input type="text" name="Email" value="{{ .Email }}"> </form> {{ end }}
Walau bagaimanapun, memandangkan lang bukan medan struct Pengguna, enjin templat akan menimbulkan ralat yang dinyatakan di atas. Untuk menyelesaikan isu ini, anda boleh menggunakan pembolehubah $ untuk mengakses konteks semasa, yang mengandungi semua pembolehubah yang ditakrifkan dalam julat luar. Kod templat yang dikemas kini akan kelihatan seperti ini:
{{ range .users }} <form action="/{{ $.lang }}/users" method="POST"> <input type="text" name="Username" value="{{ .Username }}"> <input type="text" name="Email" value="{{ .Email }}"> </form> {{ end }}
Ini akan mengakses pembolehubah lang dengan betul dan menjana output yang diingini.
Atas ialah kandungan terperinci Bagaimana untuk Mengakses Pembolehubah dari Julat Luar dalam Templat Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!