2013-06-06 15 views
7

Qual è esattamente la differenza traCreazione mappa con/senza fare

var m = map[string]int{} 

e

var m = make(map[string]int) 

è il primo solo una scorciatoia per l'inizializzazione campo più veloce? Ci sono considerazioni sulle prestazioni?

risposta

11

Il secondo modulo crea sempre una mappa vuota.

Il primo modulo è un caso speciale di una mappa letterale. Mappa letterali permettono di creare non vuote mappe:

m := map[bool]string{false: "FALSE", true: "TRUE"} 

Ora il vostro (generalizzata) Esempio:

m := map[T]U{} 

è una mappa letterale senza valori iniziali (coppie chiave/valore). È completamente equivalente a:

m := make(map[T]U) 
+0

OK. Ho pensato che forse c'è una differenza nell'allocazione. –

+5

L'unica differenza è che 'make' è l'unico modo per specificare manualmente la capacità della mappa. In generale, la lingua dovrebbe gestire la dimensione delle mappe per te, ma se sai che la mappa manterrà un massimo di N elementi, puoi minimizzare i costi di runtime allocando la mappa con 'make (mappa [T] T , N) '. Come sidenote, la funzione 'cap' integrata non funziona sulle mappe. –

+0

Lo so. Ero solo curioso di sapere se uno è assegnato nello stack e l'altro nello heap. –

Problemi correlati