Le pointeur d'une méthode de pointeur Struct peut-il être réaffecté à une autre instance ?
Lorsque vous travaillez avec des pointeurs dans les méthodes de structure Go, réaffectez le principal pointer vers une autre instance peut être difficile. Ceci est différent de la réaffectation d'un pointeur à une structure Go normale.
Contexte : valeurs du pointeur
Dans Go, les pointeurs sont des valeurs qui stockent l'adresse mémoire d'une autre variable. Lorsque vous modifiez une valeur de pointeur, vous modifiez en fait la variable pointée, pas le pointeur lui-même.
Méthodes de pointeur et type de base du récepteur
Dans Go, les méthodes de pointeur de structure doivent avoir un type de base de récepteur de T, où T est le type de la structure. Cela signifie que le récepteur ne peut pas être un pointeur vers un pointeur vers T.
Options de réaffectation du pointeur
1. Passer un pointeur à une fonction de pointeur :
Cela implique d'écrire une fonction non-méthode qui prend un pointeur vers un pointeur vers la structure. A l'intérieur de la fonction, vous pouvez ensuite modifier le pointeur pointé.
func rotateLeftToRoot(ptree **AvlTree) { // Pointer to the pointer to the AvlTree tree := *ptree // Update pointer to the new root *ptree = tree }
2. Renvoyer le pointeur mis à jour :
Cela implique de renvoyer le pointeur mis à jour de la méthode, puis de l'attribuer à la variable souhaitée dans le code appelant.
func (tree *AvlTree) rotateLeftToRoot() *AvlTree { // Update pointer to the new root prevLeft := tree.left if prevLeft != nil { tree.left = prevLeft.right prevLeft.right = tree tree = prevLeft } return tree } // Usage: tree = tree.rotateLeftToRoot()
Retour Arbres en général :
Le retour d'arbres à partir de méthodes n'est pas rare dans Go, en particulier dans la manipulation de structures de données. Tout comme la fonction append() de la bibliothèque standard Go renvoie la tranche mise à jour, il peut être nécessaire de renvoyer un pointeur d'arbre modifié pour obtenir la mise à jour de l'arborescence souhaitée.
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!