Maison >développement back-end >Golang >Pourquoi mon champ Struct s'inverse-t-il de manière inattendue lors de Go ?
Dans Go, les structures sont transmises par valeur, ce qui signifie que les modifications apportées à une structure au sein d'une fonction ne sont pas reflétées dans la structure d'origine. Cela devient évident dans le code fourni, où un champ de structure revient à sa valeur d'origine même si la valeur a apparemment été modifiée au sein d'une méthode.
Le problème réside dans la façon dont la structure est transmise à la méthode. Dans le code donné, la méthode TVManager sendMessage() modifie une copie du champ du connecteur, et toutes les modifications apportées à l'intérieur de la méthode ne sont pas propagées à la structure d'origine.
Pour résoudre ce problème, la méthode doit utiliser un récepteur pointeur. En préfixant le récepteur avec un astérisque (*), la méthode recevra un pointeur vers l'instance de structure réelle et toutes les modifications apportées au sein de la méthode seront appliquées à la structure d'origine.
func (this *TVManager) sendMessage(message string) { fmt.Println("5", this.connector) payload := map[string]string{ "id": "0", "type": "request", "uri": "ssap://system.notifications/createToast", "payload": "{'message': 'This is a message'}", } this.connector.sendCommand(payload) fmt.Println("4", this.connector) }
De même, dans le objet simulé, la méthode sendCommand() doit également utiliser un récepteur de pointeur.
func (this *MockConnector) sendCommand(payload map[string]string) { fmt.Println("0", this) this.last_command = payload this.value = true fmt.Println("0", this) }
Une autre convention Go consiste à éviter d'utiliser "this" ou "self" comme récepteur noms. Au lieu de cela, il est recommandé d'utiliser un nom concis et descriptif qui correspond à la fonctionnalité de la méthode.
En implémentant ces modifications, le champ struct sera mis à jour avec succès sans revenir à sa valeur d'origine.
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!