Méthode Golang avec le récepteur de pointeur
Lorsque vous essayez de modifier la valeur d'une instance via une méthode, il est crucial pour comprendre le concept de pointeur récepteurs. Dans cet exemple, la méthode SetSomeField ne fonctionne pas comme prévu car son récepteur n'est pas de type de pointeur.
Pour rectifier cela, nous modifions la méthode SetSomeField pour accepter un récepteur de pointeur comme suit:
func (i *Implementation) SetSomeField(newValue string) { ... }
Cependant, ce changement introduit un nouveau problème: la structure n'implémente plus l'interface car la méthode getomefield a toujours un récepteur de valeur.
La solution réside dans l'utilisation d'un pointeur vers la structure lorsque Implémentation de l'interface. Ce faisant, nous permettons à la méthode de modifier l'instance réelle sans créer de copie. Voici le code modifié:
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()) }
Dans ce code mis à jour, la fonction de création renvoie un pointeur vers la structure d'implémentation, qui implémente l'interface iface. Par conséquent, la variable de type iface peut se référer au pointeur de la structure d'implémentation, permettant à la méthode SetSomefield de modifier sa valeur.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3