Maison > développement back-end > Golang > Une méthode de pointeur Go Struct peut-elle réaffecter son pointeur de récepteur à une instance différente ?

Une méthode de pointeur Go Struct peut-elle réaffecter son pointeur de récepteur à une instance différente ?

Susan Sarandon
Libérer: 2024-12-28 08:00:31
original
296 Les gens l'ont consulté

Can a Go Struct Pointer Method Reassign its Receiver Pointer to a Different Instance?

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
}
Copier après la connexion

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()
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal