Maison > développement back-end > Golang > Pourquoi mon champ Go Struct est-il rétabli après un appel de méthode ?

Pourquoi mon champ Go Struct est-il rétabli après un appel de méthode ?

DDD
Libérer: 2024-11-15 05:48:02
original
366 Les gens l'ont consulté

Why Does My Go Struct Field Revert After a Method Call?

Réversion du champ de structure

Dans le code Go fourni, un comportement étrange est observé lorsqu'un champ de structure change au sein d'une méthode mais revient à son valeur d'origine lors d'une vérification ultérieure. Ce problème vient du fait que la structure est passée par valeur au lieu de par pointeur.

Explication :

Dans la méthode sendMessage de la structure TVManager, une méthode sendCommand d'une structure connecteur est appelée avec une valeur du TVManager structurer. Lorsqu'une structure est passée par valeur, une copie de la structure est créée et transmise à la place d'une référence à la structure d'origine.

Dans la méthode sendCommand de la structure MockConnector, les champs de la structure du connecteur (par exemple, last_command, value) est modifiée. Cependant, comme le connecteur est passé par valeur, les modifications ne sont appliquées qu'à la copie de la structure, pas à celle d'origine.

Pour résoudre ce problème, la structure du connecteur dans le La méthode sendCommand doit être passée par pointeur au lieu de par valeur. Cela permet à la méthode de modifier la structure du connecteur d'origine, plutôt qu'une copie.

Solution :

Remplacer :

func (this MockConnector) sendCommand(payload map[string]string)
Copier après la connexion

Par :

func (this *MockConnector) sendCommand(payload map[string]string)
Copier après la connexion

Supplémentaire Considérations :

  • Il est généralement déconseillé d'utiliser "this" comme nom de récepteur dans Go.
  • Si une méthode d'un type donné nécessite un récepteur de pointeur, il est préférable d'utiliser des récepteurs de pointeur pour toutes méthodes de cela tapez.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal