Memahami "Ralat Masa Jalan: Tugasan untuk Masuk dalam Peta Tiada"
Apabila cuba menggunakan struktur data peta terbina dalam Go, anda boleh menghadapi "ralat masa jalan yang ditakuti: tugasan kepada kemasukan dalam peta kosong." Ralat ini berpunca daripada percubaan untuk memberikan nilai kepada kunci yang tidak wujud dalam peta sifar (atau tidak dimulakan).
Dalam kes khusus anda, anda cuba menjana fail YAML daripada peta, di mana setiap kunci mewakili "uid" dan setiap nilai ialah peta yang mengandungi maklumat tentang individu. Walau bagaimanapun, kod anda menghadapi ralat masa jalan.
Penyelesaian: Memulakan Peta Dalam
Isu timbul kerana peta dalaman anda ("uid") tidak dimulakan sebelum anda cuba tetapkan nilai pada kuncinya (cth., "kasi," "remya" dan "nandan"). Untuk menyelesaikan masalah ini, cuma tambahkan baris berikut sebelum gelung for:
m["uid"] = make(map[string]T)
Barisan ini memulakan peta dalam dan mengaitkannya dengan kekunci "uid" dalam peta luar anda (m). Kini, anda boleh menetapkan nilai dengan selamat pada kekunci dalam peta dalaman:
m["uid"][name] = T{cn: "Chaithra", street: "fkmp"}
Kod Ditapis
Berikut ialah kod anda dengan pembetulan yang sedia ada:
package main import ( "fmt" "gopkg.in/yaml.v2" ) type T struct { cn string street string } func main() { names := []string{"kasi", "remya", "nandan"} m := make(map[string]map[string]T, len(names)) m["uid"] = make(map[string]T) for _, name := range names { m["uid"][name] = T{cn: "Chaithra", street: "fkmp"} } fmt.Println(m) y, _ := yaml.Marshal(&m) fmt.Println(string(y)) }
Dengan pengubahsuaian ini, anda tidak akan menghadapi "ralat masa jalan: penugasan kepada entri dalam peta kosong." Kod anda akan berjaya menjana fail YAML dengan struktur yang diingini.
Atas ialah kandungan terperinci Mengapa Saya Mendapat 'Ralat Masa Jalanan: Tugasan untuk Kemasukan dalam Peta Tiada' dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!