Heim >Backend-Entwicklung >Golang >Warum gibt Go beim Verketten von Methoden die Fehlermeldung „Adresse kann nicht übernommen werden' oder „Zeigermethode kann nicht aufgerufen werden' zurück?
Zeigerbezogene Fehler in Go verstehen
In Go können Fehler wie „Die Adresse von kann nicht übernommen werden“ und „Kann nicht“ auftreten „Call Pointer Method on“ beim Arbeiten mit Zeigern. Diese Frage und Antwort untersucht die Gründe für diese Fehler und bietet mögliche Problemumgehungen.
Betrachten wir den folgenden Code, der kompiliert wird und funktioniert:
diff := projected.Minus(c.Origin) dir := diff.Normalize()
Wenn wir jedoch versuchen, die beiden Vorgänge zu kombinieren in eine einzige Zeile:
dir := projected.Minus(c.Origin).Normalize()
Wir werden auf die oben genannten Fehler stoßen. Um zu verstehen, warum, müssen wir uns mit den Empfängertypen und der Adressierbarkeit von Werten in Go befassen.
Zeigerempfänger und Adressierbarkeit
Die Normalize()-Methode von Vector3 hat eine Zeigerempfänger (*Vector3), der angibt, dass für den Aufruf ein Zeiger auf den Vector3-Wert erforderlich ist. Wenn Sie die Verknüpfung diff.Normalize() verwenden, übernimmt der Compiler automatisch die Adresse der Diff-Variablen (&diff), um sie an den erforderlichen Zeigerempfängertyp anzupassen.
Im zweiten Beispiel verwendet jedoch diff.Minus(c .Origin) gibt einen Vector3-Wert zurück, der nicht adressierbar ist. Dies bedeutet, dass der Compiler seine Adresse nicht an Normalize() übergeben kann.
Problemumgehungen für Zeigerempfänger und Adressierbarkeit
Es gibt mehrere mögliche Problemumgehungen für dieses Problem:
Zusätzliche Punkte zu Bedenken Sie
Das obige ist der detaillierte Inhalt vonWarum gibt Go beim Verketten von Methoden die Fehlermeldung „Adresse kann nicht übernommen werden' oder „Zeigermethode kann nicht aufgerufen werden' zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!