Méthode Golang avec récepteur pointeur [Duplicata]
Problème :
En Go, quand en créant une méthode avec un récepteur de pointeur et en implémentant une interface, l'erreur suivante peut se produire :
cannot use obj (type Implementation) as type IFace in return argument: Implementation does not implement IFace (GetSomeField method has pointer receiver)
Réponse :
Pour résoudre cette erreur, assurez-vous que le pointeur vers la structure implémente l'interface. Cela permet à la méthode de modifier les champs de l'instance réelle sans créer de copie.
Modification du code :
Remplacez la ligne incriminée par :
return &obj
Explication :
En renvoyant un pointeur vers la structure, il implémente l'interface tout en permettant à la méthode de modifier l'instance réelle.
Exemple (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()) }
En utilisant un récepteur de pointeur et en vous assurant que le pointeur implémente l'interface, vous peut modifier avec succès l'instance réelle de la structure tout en implémentant les méthodes requises.
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!