Estoy tratando de generar un mapa y luego convertirlo en un archivo yaml como este:
uid :
kasi:
cn: Chaithra
street: fkmp
nandan:
cn: Chaithra
street: fkmp
remya:
cn: Chaithra
street: fkmp
Creo que me estoy perdiendo algo importante al crear el mapa. Mi código está debajo.
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)
}
Está dando el siguiente error:
panic: runtime error: assignment to entry in nil map
Respuestas:
No ha inicializado su mapa interno. Antes de su bucle for, puede agregar
m["uid"] = make(map[string]T)
y luego asignar el nombre.fuente
Debe verificar si el mapa es nulo e inicializar uno si es nulo dentro del bucle for:
fuente
Hay algo según el error.
Para mapas anidados, cuando se asignan a la clave de nivel profundo, debemos estar seguros de que su clave externa tiene valor. De lo contrario, dirá que el mapa es nulo. Por ejemplo, en tu caso
m es un mapa anidado que contiene una
string
clave con unmap[string]T
valor. Y te asignas el valoraquí puede ver el
m["uid"]
isnil
y estamos indicando que contiene un valor[name]
que es una clave para el valor anidado de tipoT
. Entonces, primero debe asignar un valor a "uid" o inicializarlo comofuente
@Makpoc ya respondió la pregunta. simplemente agregando información adicional.
fuente