Golang: Kann der Zeiger in einer Strukturzeigermethode einer anderen Instanz zugewiesen werden?

Ich habe mich mit Golang befasst und ein paar Datenstrukturen implementiert, um zu lernen, wie die Sprache funktioniert. Ich bin beim Schreiben des Codes für einen AVL-Baum auf folgendes Problem gestoßen:

Das Zuweisen des Primärzeigers von einer Strukturzeigermethode scheint keine Auswirkung außerhalb des Funktionsbereichs zu haben. Z.B.tree.rotateLeftToRoot() führt nicht zutree.left wird der neue Baum.

Frage Gibt es eine Möglichkeit, den Zeiger in einer Strukturzeigermethode in Golang neu zuzuweisen, oder wird davon generell abgeraten? Im Beispiel wäre dies das"tree = prevLeft" Linie

Code-Auszug

//Graphical representation of t.rotateLeftToRoot():
//      t                  L
//   L     R     ->    LL     t
//LL LR                     LR  R
func (tree *AvlTree) rotateLeftToRoot() {
   if tree == nil {
      return
   }
   prevLeft := tree.left
   if prevLeft != nil {
      tree.left = prevLeft.right //tree.left passed root its right branch
      prevLeft.right = tree      //tree becomes tree.left's right branch
      tree.updateHeight()
      prevLeft.updateHeight()
      tree = prevLeft            //desired behaviour: tree.left becomes the new tree
                                 //actual behaviour: no effect when function returns
   }
}

Ich habe andere Kombinationen zum Festlegen des Werts oder der Adresse des Baums ausprobiert und keine davon hatte die beabsichtigte Wirkung. Zum Beispiel,*tree = *prevLeft führt zu einer Endlosschleife.

Zusätzlicher Hinweis: Zurücksenden vontree und Einstellung"tree = tree.rotateLeftToRoot()" vermeidet das Problem. Dies funktioniert, aber es scheint schmutzig zu sein, Effekte zu mischen und Rückgabewerte zuzuweisen, wenn der Aufrufer wirklich nur eine Funktion aufrufen möchte, um den Baum zu aktualisieren.

Kann dertree auf @ gesetzt werdprevLeft aus der Funktion heraus?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage