2016-05-02 7 views
0

Ich habe die Go-Funktion und möchte den ersten Wert dereferenzieren, um ihn in einem Zeiger zu speichern.Dereferenzieren des ersten Rückgabewerts in go

Z. B .:

func foo() (int64, error) {...} 
var A *int64 
var err error 
A, err = &foo() 

Ist dies möglich, oder muss ich die (in meinem Fall sehr groß) Rückgabewert kopieren?

+1

Mögliches Duplikat von [Wie bekomme ich den Zeiger des Rückgabewertes vom Funktionsaufruf?] (Http://stackoverflow.com/questions/30744965/how-to-get-the-pointer-of-return-value-from -function-call) Auch verwandt: [Wie kann ich einen Verweis auf das Ergebnis einer Operation in Go speichern] (http://stackoverflow.com/questions/34197248/how-cani--store-reference-to-the-the- operation-in-go) – icza

+0

Ich hatte angenommen, dass ich es für einen einwertigen Funktionsaufruf tun könnte, also habe ich das nicht einmal gesehen; Ich denke, letztendlich bedeutet das, dass die Frage strittig ist. – JustinHK

Antwort

4

Sie können das nicht tun. Der Adressoperator & kann nicht auf Funktionsaufrufe angewendet werden.

Spec: Address operators:

für einen Operanden vom Typ xT erzeugt die Adressenoperation &x einen Zeiger des Typs *T zu x. Der Operand muss adressierbar sein, das heißt, entweder eine Variable, Zeigerindirection oder Schichtindexierungsoperation; oder ein Feldselektor eines adressierbaren Strukturoperanden; oder eine Array-Indizierungsoperation eines adressierbaren Arrays. Als eine Ausnahme von der Adressierbarkeitsanforderung kann x auch eine (möglicherweise geklammerte) composite literal sein. Wenn die Auswertung von x eine run-time panic verursachen würde, dann wird auch die Auswertung von &x durchgeführt.

Was Sie tun sollten, ist Ihre Funktion zu ändern, um einen Zeiger an erster Stelle zurückzugeben, wenn es darauf ankommt.

Verwandte Themen