使用/不使用make创建地图

Eri*_*ner 19 go

究竟有什么区别

var m = map[string]int{}
Run Code Online (Sandbox Code Playgroud)

var m = make(map[string]int)
Run Code Online (Sandbox Code Playgroud)

第一个只是快速字段初始化的快捷方式吗?有性能考虑吗?

zzz*_*zzz 31

第二种形式总是创建一个空地图.

第一种形式是地图文字的特例.地图文字允许创建非空地图:

m := map[bool]string{false: "FALSE", true: "TRUE"}
Run Code Online (Sandbox Code Playgroud)

现在你的(通用)例子:

m := map[T]U{}
Run Code Online (Sandbox Code Playgroud)

是没有初始值(键/值对)的地图文字.它完全等同于:

m := make(map[T]U)
Run Code Online (Sandbox Code Playgroud)

  • 唯一的区别是`make`是你可以手动指定地图容量的唯一方法.一般来说,语言应该为你处理地图的大小,但如果你知道地图最多可以容纳N个元素,你可以通过用`make(map [T] T)分配地图来最小化运行时成本. ,N)`.作为旁注,内置的"cap"函数在地图上不起作用. (6认同)
  • @JimmyZelinskie 在你的描述中我会将“最大 N 个元素”更改为“至少 N 个元素”或“大约 N 个元素”。为映射提供给 `make` 的大小“提示”是*初始分配*;它仍然可以增长到超过 N,并且具有与不指定任何大小相同的内存和性能。“提示”有助于避免在添加元素 1 到 N 时进行任何大小调整。 (2认同)