Maison >développement back-end >Golang >Comment les récepteurs de pointeurs peuvent-ils résoudre les problèmes de mise en œuvre de l'interface Go lors de la modification des valeurs d'instance sous-jacentes ?
Récepteurs de pointeur pour les interfaces dans Go
Lors de l'utilisation de récepteurs de méthode dans Go, un récepteur de type pointeur permet à la méthode de modifier le réel valeur d'instance du récepteur. Dans le code donné, nous avons l'interface IFace avec deux méthodes, GetSomeField et SetSomeField. La structure d'implémentation implémente IFace et possède des méthodes avec des récepteurs de valeurs, ce qui signifie qu'elles opèrent sur une copie de l'instance.
Pour améliorer le comportement, nous devons modifier le récepteur de méthode pour SetSomeField afin qu'il soit de type pointeur, de sorte que nous pouvons manipuler l'instance réelle. Cependant, cela conduit à une erreur de compilation où l'implémentation ne peut pas implémenter IFace car la méthode SetSomeField a un récepteur de pointeur.
La solution consiste à garantir que le pointeur vers la structure implémente l'interface. Ce faisant, nous pouvons modifier les champs de l'instance réelle sans créer de copie. Voici le code modifié :
package main import ( "fmt" ) type IFace interface { SetSomeField(newValue string) GetSomeField() string } type Implementation struct { someField string } func (i *Implementation) GetSomeField() string { return i.someField } func (i *Implementation) SetSomeField(newValue string) { i.someField = newValue } func Create() *Implementation { return &Implementation{someField: "Hello"} } func main() { var a IFace a = Create() a.SetSomeField("World") fmt.Println(a.GetSomeField()) }
Avec cette modification, nous activons le pointeur vers Implémentation pour implémenter IFace, nous permettant de modifier l'instance réelle sans créer de copie.
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!