Ich war kürzlich in Knoten über etwas Ähnliches gebunden.
Zuerst spricht über Strings in Ihrem Beispiel eine Ablenkung ist, verwenden Sie eine Struktur statt, es zu etwas neu zu schreiben wie:
func a() MyStruct {
/* doesn't matter */
}
var b *MyStruct = &a()
Dies wird nicht kompilieren, weil Sie die Adresse eines nicht nehmen(). So tun:
func a() MyStruct {
/* doesn't matter */
}
tmpA := a()
var b *MyStruct = &tmpA
Dies kompiliert, aber Sie haben einen MyStruct auf den Stapel zurück, ausreichend Platz auf dem Heap zugewiesen einen MyStruct zu speichern, kopiert dann die Inhalte aus dem Stapel auf dem Heap. Wenn Sie dies vermeiden wollen, dann schreiben Sie es wie folgt aus:
func a2() *MyStruct {
/* doesn't matter as long as MyStruct is created on the heap (e.g. use 'new') */
}
var a *MyStruct = a2()
Kopieren normalerweise billig ist, aber diese structs könnte groß sein. Noch schlimmer, wenn Sie die Struktur modifizieren und "bleiben" wollen, können Sie nicht kopieren und dann die Kopien modifizieren.
Wie auch immer, es macht umso mehr Spaß, wenn Sie einen Rückgabetyp der Schnittstelle {} verwenden. Die Schnittstelle {} kann die Struktur oder ein Zeiger auf eine Struktur sein. Das gleiche Kopierproblem kommt auf.
Was wollten Sie mit der fraglichen Konstruktion erreichen? – Wolf