Les pointeurs des méthodes de pointeur Struct peuvent-ils être réaffectés à d'autres instances ?
Comprendre les pointeurs dans Go
Les pointeurs dans Go, comme les entiers, sont des valeurs interprétées comme des adresses mémoire. Pour modifier une variable de type int, un pointeur vers ce pointeur (int) est passé, et l'objet pointé (*i) se voit ensuite attribuer une nouvelle valeur.
Modification Pointeurs dans les méthodes de pointeur Struct
Cependant, les méthodes de récepteur struct ne peuvent pas être des pointeurs vers des pointeurs (*T) pour le type de récepteur. Au lieu de cela, il existe deux options :
Définir une fonction non-méthode qui prend un **T pointeur et modifie l'objet pointé.
Renvoyer le pointeur modifié de la méthode et demander à l'appelant de l'attribuer à la variable contenant le pointeur d'arborescence.
Résoudre les problèmes
Renvoyer le pointeur modifié d'une méthode est une pratique courante dans Go. Par exemple, la fonction append() ajoute à la fois des éléments à une tranche et renvoie la tranche modifiée, que l'appelant doit attribuer.
Exemple de code
En utilisant l'option 1, la solution pour faire tourner un arbre laissé à sa racine serait be:
func rotateLeftToRoot(ptree **AvlTree) { tree := *ptree if tree == nil { return } prevLeft := tree.left if prevLeft != nil { tree.left = prevLeft.right prevLeft.right = tree tree = prevLeft } *ptree = tree }
Conclusion
Bien qu'il ne soit pas recommandé de réaffecter des pointeurs dans les méthodes de pointeur de structure dans Go, les deux options décrites ci-dessus offrent des alternatives pour modifier les structures arborescentes. Renvoyer le pointeur modifié et demander à l'appelant de l'attribuer est une approche courante et efficace dans la programmation Go.
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!