Ne peut pas attribuer à la structure du champ dans une carte
J'ai la structure de données comme ceci:
type Snapshot struct {
Key string
Users []Users
}
snapshots := make(map[string] Snapshot, 1)
//then did the initialization
snapshots["test"] = Snapshot {
Key: "testVal",
Users: make([]Users, 0),
}
Users
est une autre structure.
Puis quand j'ai essayé d'ajouter des nouveaux Users
valeurs dans la tranche comme ceci:
snapshots["test"].Users = append(snapshots["test"].Users, user)
J'ai continué à obtenir cette erreur:
cannot assign to struct field snapshots["test"].Users in map
Aussi essayé la solution de contournement https://github.com/golang/go/issues/3117 donc comme ceci:
tmp := snapshots["test"].Users
tmp = append(tmp, user)
snapshots["test"].Users = tmp
Mais pas de chance, encore exactement la même erreur.
Et j'ai aussi essayé de déclarer la carte avec le pointeur, donc: snapshots := make(map[string] *Snapshot, 1)
, toujours pas de chance.
- Reportez-vous à stackoverflow.com/questions/32751537/...
- merci pour ur de réponse, j'ai enfin compris la raison pour laquelle, après j'ai déjà utiliser le pointeur elle ne fonctionne toujours pas, c'est parce que je n'ai
snapshots := make(map[string] Snapshot, 1)
, alors je pense que lelen(snapshots)
sera de 1, plus tard, j'ai initialisé la carte avec une boucle for, qui a utilisé la valeurlen(snapshots)
,.... donc, que signifie le processus d'initialisation de ne jamais se faire.... puis après j'ai utilisé un pointeur, j'obtiens cette erreur:panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x78 pc=0x427bb9d]
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, pour cette question, la solution dans ce post Pourquoi ai-je un "impossible d'assigner une" erreur lors de la définition de la valeur à une structure comme une valeur dans une carte? fonctionne parfaitement bien.
Puis, enfin compris pourquoi après j'ai déjà changé d'utiliser le pointeur de mon cas ne fonctionne toujours pas, reportez-vous au-dessous de code très simple:
Que pensez-vous de la sortie? J'ai simplement pensé que c'est tout serait:
3
, mais en fait pour la carte, la sortie sera0
Puis plus tard dans le processus d'initialisation de la carte, j'ai utilisé une boucle for et avec cette valeur
len(snapshots)
, cela signifie que le processus d'initialisation ne sera jamais exécuter...Oui, c'est la raison.
make
argument pour une carte de capacité, pas de longueur, et est très rarement utilisé.make(type, len, cap)
Ce que j'ai fait pour utiliser mon struct carte dans une boucle a été la suivante:
Sortie doit être:
C'est de ne pas ajouter, mais ils doivent travailler pour attribuer plusieurs valeurs à une struct carte, vous pouvez également effectuer les opérations suivantes et de permettre à la carte de référence de ses propres valeurs:
Qui devrait de sortie:
Noter qu'aucun des erreurs sont déclenchés lorsque nous nous référons à un vide struct valeur, c'est parce que lorsque nous initialisons notre structure, ses valeurs de départ comme des valeurs vides mais non nul (
0
int,""
de chaîne de caractères, etc.)