Go中基于Map定义的自定义类型传参时是否仍按引用传递?
关于Go中自定义Map类型的函数参数传递问题
首先明确:Go语言里所有参数传递都是值传递,但map类型本质是一个指向底层哈希表的指针封装体,你定义的myMapType作为map的自定义类型,完全继承了这种特性。
当你把myMapType类型的变量传给doSomething函数时,传递的是这个map指针的副本——注意,复制的只是8字节左右的指针值(64位系统),而不是整个map的所有数据。这个副本和原指针指向的是同一个底层哈希表,所以在函数内对map内容的修改(比如添加键值对、修改切片元素)会直接反映到原map上。
回到你的问题:完全不需要使用指针。传递自定义map类型的开销极小,不会产生不必要的数据复制。如果强行用指针(比如*myMapType),反而会多一层解引用的操作,既没必要,也不会带来性能提升。
只有一种场景需要传指针:如果你的函数需要修改变量本身的指针指向(比如把传入的m重新赋值为一个全新的map),这时候才需要传递指针类型,否则纯操作map内容的话,直接传自定义map类型就足够了。
内容的提问来源于stack exchange,提问作者Apprikot
相关产品推荐
相关产品推荐

