Maison  >  Article  >  développement back-end  >  Pourquoi ne puis-je pas attribuer à un champ Struct dans une carte ?

Pourquoi ne puis-je pas attribuer à un champ Struct dans une carte ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-12 22:36:02376parcourir

Why Can't I Assign to a Struct Field in a Map?

Erreur : impossible d'attribuer au champ Struct de la carte

Lorsque vous travaillez avec des cartes qui stockent des structures, les développeurs rencontrent souvent l'erreur "Impossible d'attribuer à la structure champ sur une carte." Ce problème survient lors de la tentative de modification d'un sous-champ dans une structure stockée dans la carte.

L'exemple fourni illustre ce scénario. Un instantané de carte est initialisé avec une paire clé-valeur où la valeur est un instantané de structure contenant une tranche de structures d'utilisateurs. Cependant, lorsque vous essayez d'ajouter à la tranche Utilisateurs, l'erreur mentionnée est générée.

Pour résoudre ce problème, il est essentiel de comprendre que la structure d'origine stockée dans la carte n'est pas adressable. Au lieu de cela, c'est une copie. Par conséquent, aucune modification ne sera reflétée dans la structure d'origine de la carte.

L'approche correcte consiste à récupérer la structure de la carte, à apporter les modifications nécessaires, puis à la réaffecter à la carte. Voici un code révisé qui implémente cette approche :

func main() {
  snapshots := make(map[string]Snapshot, 1)

  snapshots["test"] = Snapshot{
    Key: "testVal",
    Users: make([]Users, 0),
  }

  user := Users{...} // Initialize a new Users struct

  // Retrieve the Snapshot value from the map
  snapshot := snapshots["test"]

  // Append to the Users slice
  snapshot.Users = append(snapshot.Users, user)

  // Reassign the modified Snapshot value to the map
  snapshots["test"] = snapshot
}

En suivant cette approche, la structure Snapshot d'origine dans la carte sera mise à jour avec succès avec la tranche Utilisateurs ajoutée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn