我知道map是Go中的引用类型(它在其基础结构中有一个指向映射项存储区域的指针)。但是,我想知道映射的基础结构的大小是多少,因为我想知道使用指向映射的指针作为函数参数是否比不使用指针要快。
看看这个blog post,似乎maptype结构具有很多字段,并且复制将需要很长时间(相对于指针)。
通过golang标准库,我发现几乎没有使用* map [x] x,因此我猜想仅使用map [x] x作为函数参数应该是有效的。因此,这使我认为也许编译器实际上是通过指向maptype结构的指针代替了map [x] x。是这样吗如果不是这样,那么可能会避免复制具有许多字段的maptype结构吗?
答案 0 :(得分:1)
Go map
变量的零值为nil
指针。
var m map[string]int
make
初始化一个map
并将map
变量设置为指向一个包runtime
hmap
struct
。
m = make(map[string]int)
在Go中,所有参数均按值传递。在map
值(引用类型)的情况下,map
值是指针。因此,将map
值作为函数或方法参数进行传递很快,您正在传递一个指针。
Go map
runtime
struct
当前位于src/runtime/map.go
Go源文件中。由于您仅看到hmap
指针,因此它们的大小不太可能相关。
请参见GopherCon 2016: Keith Randall - Inside the Map Implementation。