2015-04-08 10 views

risposta

8

Come sottolineato nel mailing list, si può solo fare questo:

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

e poi

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

se si ha a che fare spesso. intPtr ottiene inline (vedi output go build -gcflags '-m'), quindi dovrebbe avere quasi nessuna penalità di prestazioni.

+0

Puoi anche fare 'instance: = foo {i: new (int)}; foo.i = 1; 'se non vuoi scrivere una funzione separata. – fuz

+0

Non è giusto @FUZxxl, non puoi assegnare '1' come un tipo' int' a '* int'. Finisci nella stessa situazione dell'OP. –

+2

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

5

No, non è possibile eseguire questa operazione in un'unica riga.

+1

Gross. Qualche idea sul perché no? È troppo difficile da implementare per rimuovere una linea a volte rumorosa? – MushinNoShin

+4

@MushinNoShin: un puntatore è l'indirizzo di qualche cosa, quindi hai bisogno di quella * cosa *. – maerics

+1

@maerics: era già chiaro, questo chiedeva se ci sono modi convenienti per eseguire automaticamente l'allocazione di memoria in background e mantenere il rumore non necessario dal mio codice. Vedi la risposta accettata. – MushinNoShin

Problemi correlati