Создание карты с/без make

В чем же разница между

var m = map[string]int{}

и

var m = make(map[string]int)

Является первым просто ярлыком для более быстрой инициализации поля? Есть ли соображения производительности?

Ответ 1

Вторая форма всегда создает пустую карту.

Первая форма является частным случаем литерала карты. Картографические литералы позволяют создавать непустые карты:

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

Теперь ваш (обобщенный) пример:

m := map[T]U{}

- это литерал карты без начальных значений (пары ключ/значение). Это полностью эквивалентно:

m := make(map[T]U)

Кроме того, make - это единственный способ указать начальную емкость вашей карты, которая больше, чем первоначально назначенное количество элементов. Пример:

m := make(map[T]U, 50)

создаст карту с достаточным пространством для 50 предметов. Это может быть полезно для сокращения будущих распределений, если вы знаете, что карта будет расти.