Является первым просто ярлыком для более быстрой инициализации поля? Есть ли соображения производительности?
Ответ 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 предметов. Это может быть полезно для сокращения будущих распределений, если вы знаете, что карта будет расти.