Saya mencoba membuat peta dan kemudian mengubahnya menjadi file yaml seperti ini:
uid :
kasi:
cn: Chaithra
street: fkmp
nandan:
cn: Chaithra
street: fkmp
remya:
cn: Chaithra
street: fkmp
Saya rasa saya kehilangan sesuatu yang penting saat membuat peta. Kode saya ada di bawah.
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)
}
Ini memberikan kesalahan berikut:
panic: runtime error: assignment to entry in nil map
Jawaban:
Anda belum menginisialisasi peta dalam Anda. Sebelum loop for Anda, Anda dapat menambahkan
m["uid"] = make(map[string]T)
dan kemudian menetapkan namanya.sumber
Anda harus memeriksa apakah peta tersebut nihil dan menginisialisasinya jika nihil di dalam perulangan for:
sumber
Ada hal yang sesuai dengan kesalahannya
Untuk peta bersarang saat ditetapkan ke kunci level dalam, kita perlu memastikan bahwa kunci terluarnya memiliki nilai. Jika tidak, akan dikatakan bahwa peta tersebut nihil. Misalnya dalam kasus Anda
m adalah peta bersarang yang berisi
string
kunci denganmap[string]T
nilai sebagai. Dan Anda menetapkan nilainyadi sini Anda dapat melihat
m["uid"]
isnil
dan kami menyatakan itu berisi nilai[name]
yang merupakan kunci untuk nilai bertingkat tipeT
. Jadi pertama-tama Anda perlu menetapkan nilai ke "uid" atau menginisialisasinya sebagaisumber
@Makpoc sudah menjawab pertanyaannya. hanya menambahkan beberapa info tambahan.
sumber