2015-04-08 6 views
5

ein struct Da Einfache Möglichkeit zum Zuweisen von Zeigerwerten?

type foo struct { 
i *int 
} 

wie

aussieht, wenn ich i-1 setzen will, muß ich

throwAway := 1 
instance := foo { i: &throwAway } 

Gibt es meine neuen eine Möglichkeit, dies ohne in einer einzigen Zeile zu tun zu geben, i Wert es ist eigener Name (in diesem Fall throwaway)?

Antwort

8

Wie in der mailing list hingewiesen, können Sie dies nur tun:

func intPtr(i int) *int { 
    return &i 
} 

und dann

instance := foo { i: intPtr(1) } 

, wenn Sie es oft zu tun haben. intPtr wird inline (siehe go build -gcflags '-m' Ausgabe), so sollte es fast keine Leistungseinbußen haben.

+0

Sie können auch 'instance: = foo {i: new (int)}; foo.i = 1; 'wenn Sie keine separate Funktion schreiben wollen. – fuz

+0

Das ist nicht richtig @ FUZxxl, Sie können '1' nicht als Typ' int' zu '* int' zuweisen. Sie landen wieder in der gleichen Situation wie das OP. –

+2

Sorry, versuche 'instance: = foo {i: new (int)}; * foo.i = 1; ' – fuz

5

Nein, dies ist in einer Zeile nicht möglich.

+1

Brutto. Irgendwelche Gedanken, warum nicht? Ist es einfach zu schwierig, eine gelegentlich störende Leitung zu entfernen? – MushinNoShin

+4

@MushinNoShin: ein Zeiger ist die Adresse von etwas, so dass Sie das * Ding * brauchen. – maerics

+1

@maerics: das wurde bereits verstanden, das war die Frage, ob es irgendwelche bequeme Möglichkeiten gibt, die Speicherzuweisung automatisch im Hintergrund durchzuführen und das unnötige Rauschen aus meinem Code herauszuhalten. Siehe die akzeptierte Antwort. – MushinNoShin

Verwandte Themen