Maison >développement back-end >Golang >Les méthodes de pointeur Go Struct peuvent-elles réaffecter des pointeurs à différentes instances ?

Les méthodes de pointeur Go Struct peuvent-elles réaffecter des pointeurs à différentes instances ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-21 02:25:10661parcourir

Can Go Struct Pointer Methods Reassign Pointers to Different Instances?

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 :

  • Option 1 : Fonction non-méthode

Définir une fonction non-méthode qui prend un **T pointeur et modifie l'objet pointé.

  • Option 2 : Renvoyer le modifié Pointeur

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn