C'è un motivo per questo comportamento?
La ragione per il comportamento è che c'è un'eccezione a indirizzabilità per quella specifica notazione e la ragione di tale eccezione è spiegata here da uno dei manutentori Go:
Sono speciale perchè abbiamo deciso che la notazione è stata utile sufficiente per i costruttori per meritare un caso speciale:
Taking the address of a composite literal (§Address operators)
generates a unique pointer to an instance of the literal's value.
http://golang.org/doc/go_spec.html#Composite_literals
Russ
"Prendendo l'indirizzo di un letterale composito (operatori §Address) genera un puntatore unico a un'istanza del valore del letterale". Potresti elaborarlo?
penso che significa che la notazione notazione &Object{}
è semplicemente un puntatore letterale ogni volta che viene eseguito crea una nuova istanza del valore e un nuovo puntatore viene creato che punti al nuovo valore. L'eccezione di indirizzamento deriva semplicemente dalla notazione di questo letterale, è diversa dalle altre indirizzabili perché non viene gestita dall'operatore &
.
Vorrei una risposta simile a quella di jesse su il link "qui" che hai citato. Cioè per C. Qualcuno può confermare che per golang?
La mia ipotesi è questo che questa notazione è utile con l'analisi di fuga, che determina in fase di compilazione se un riferimento sfugge la funzione e determina se debba essere allocato sul cumulo o pila (più veloce). Da quello che ho capito, le variabili che hanno preso il loro indirizzo sono considerate candidate per l'analisi di fuga. Dal momento che uno degli obiettivi principali di Go è la compilazione veloce, penso che la creazione e il tracciamento dei riferimenti sia necessario per essere chiari.
Ad esempio, per Item{}.Method()
la necessità di creare un puntatore e quindi eseguire analisi sfuggire al valore Item{}
dipenderà dal tipo di ricevitore del Method()
se è *Item
o semplicemente Item
complica inutilmente compilazione. Ecco perché si utilizza la notazione esplicita &Item{}
per creare un *Item
.
fonte
2014-09-01 09:15:18
"Perché una litteria composta non è indirizzabile finché non è stata assegnata a una variabile" Vorrei sapere perché. Il thread non dà ragionamenti/argomenti soddisfacenti. – Gnani
@Gnani perché il valore letterale in sé non è direttamente indirizzabile. & CompiteLiteral è. – VonC