2013-06-06 11 views
7

Czym dokładnie jest różnica międzyTworzenie map z/bez uczynić

var m = map[string]int{} 

i

var m = make(map[string]int) 

Czy najpierw tylko skrót do szybszego inicjalizacji pola? Czy są jakieś uwagi dotyczące wydajności?

Odpowiedz

11

Drugi formularz zawsze tworzy pustą mapę.

Pierwsza forma to specjalny przypadek literału mapy. Mapa literały pozwalają stworzyć nie pustym mapy:

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

Teraz twój (uogólniona) przykład:

m := map[T]U{} 

jest mapa dosłowny bez wartości początkowe (par klucz/wartość). Jest to całkowicie równoważne z:

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

W porządku. Myślałem, że może istnieje różnica w alokacji. –

+5

Jedyna różnica polega na tym, że 'make' jest jedynym sposobem, w jaki można ręcznie określić pojemność mapy. Ogólnie rzecz biorąc, język ma obsługiwać rozmiar map dla ciebie, ale jeśli wiesz, że mapa będzie zawierała maksymalnie N elementów, możesz zminimalizować koszty runtime, przydzielając mapę za pomocą 'make (map [T] T , N) '. Jako senuote, wbudowana funkcja 'cap' nie działa na mapach. –

+0

Wiem o tym. Byłem po prostu ciekawy, czy może ktoś jest przydzielony na stosie, a drugi na stercie. –

Powiązane problemy