Rumah >pembangunan bahagian belakang >Golang >Mengapa Menetapkan Peta dalam Go Menghasilkan 'ralat masa jalan: penetapan kepada entri dalam peta kosong' dan Bagaimana Ia Boleh Dibetulkan?
Ralat Masa Jalan dalam Tugasan Peta
Soalan:
Semasa cuba menukar peta kepada fail YAML, ralat ditemui menyatakan "ralat masa jalan: tugasan kepada kemasukan dalam peta kosong." Semak coretan kod berikut:
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)) for _, name := range names { //t := T{cn: "Chaithra", street: "fkmp"} m["uid"][name] = T{cn: "Chaithra", street: "fkmp"} } fmt.Println(m) y, _ := yaml.Marshal(&m) fmt.Println(string(y)) //fmt.Println(m, names) }
Apakah yang menyebabkan ralat ini dan bagaimanakah ia boleh diselesaikan?
Jawapan:
Isunya terletak dalam permulaan peta dalam dalam peta luar. Dalam contoh yang diberikan, peta m["uid"] tidak dimulakan, mengakibatkan peta sifar apabila cuba memberikan nama kepadanya.
Untuk memulakan peta dalam, tambahkan baris berikut sebelum bagi gelung:
m["uid"] = make(map[string]T)
Ini mencipta peta dalaman dan membenarkan nama diberikan kepadanya tanpa menemui peta kosong ralat.
Kod yang diperbetulkan menjadi:
func main() { names := []string{"kasi", "remya", "nandan"} m := make(map[string]map[string]T, len(names)) m["uid"] = make(map[string]T) // Initialize the inner map for _, name := range names { m["uid"][name] = T{cn: "Chaithra", street: "fkmp"} } fmt.Println(m) y, _ := yaml.Marshal(&m) fmt.Println(string(y)) //fmt.Println(m, names) }
Atas ialah kandungan terperinci Mengapa Menetapkan Peta dalam Go Menghasilkan 'ralat masa jalan: penetapan kepada entri dalam peta kosong' dan Bagaimana Ia Boleh Dibetulkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!