In breve: non è possibile.
Il messaggio di errore dice:
non può prendere l'indirizzo del k
Non ci sono limiti alla operando dell'operatore indirizzo &
. Spec: Address operators:
Per un operando x
di tipo T
, l'operazione indirizzo &x
genera un puntatore di tipo *T
a x
. L'operando deve essere indirizzabile, ovvero una variabile, puntatore indiretto o operazione di indicizzazione delle sezioni; o un selettore di campo di un operando struct indirizzabile; o un'operazione di indicizzazione dell'array di un array indirizzabile. In deroga al requisito di indirizzabilità, x
può anche essere un (eventualmente tra parentesi) composite literal. Se la valutazione di x
causerebbe un valore run-time panic, verrà eseguita anche la valutazione di &x
.
costanti sono non elencati come indirizzabili, e le cose che non sono elencati nelle specifiche, come indirizzabile (citato sopra) non può essere l'operando dell'operatore indirizzo &
(non è possibile prendere l'indirizzo di loro).
Non è consentito prendere l'indirizzo di una costante. Questo è per 2 motivi:
- Una costante potrebbe non avere un indirizzo.
- E anche se un valore costante è memorizzato in memoria in fase di esecuzione, questo è per aiutare il runtime a mantenere costanti che: costante. Se si potesse prendere l'indirizzo di un valore costante, si potrebbe assegnare l'indirizzo (puntatore) a una variabile e si potrebbe cambiarlo (il valore puntato, il valore della costante).
Se è necessario un puntatore a un valore uguale a quella costante, assegnarlo a una variabile di cui è indirizzabile in modo da poterne prendere l'indirizzo, ad es.
func main() {
const k = 5
v := k
address := &v // This is allowed
}
Ma sanno che in Go costanti numeriche rappresentano i valori di precisione arbitraria e non fanno troppo pieno. Quando assegni il valore di una costante a una variabile, potrebbe non essere possibile (ad esempio la costante potrebbe essere maggiore del valore massimo del tipo della variabile a cui la stai assegnando - risultante in errore in fase di compilazione), oppure potrebbe non essere lo stesso (ad es. in caso di costanti floating point, potrebbe perdere precisione).
quindi non è possibile trovare l'indirizzo di costante :) – Arvind