Maison > Article > développement back-end > Pourquoi mon champ Go Struct est-il rétabli après un appel de méthode ?
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)
Par :
func (this *MockConnector) sendCommand(payload map[string]string)
Supplémentaire Considérations :
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!