go slice 和 map 分别作为函数参数时有什么区别?

go 复制代码
func makemap(t *maptype, hint int64, h *hmap, bucket unsafe.Pointer) *hmap
 
func makeslice(et *_type, len, cap int) slice
  • makemap 返回的是 *hmap,是一个指针.
  • makeslice 返回的是一个slice,是一个结构体。

makemap 和 makeslice 的区别,带来一个不同点:当 map 和 slice 作为函数参数时,在函数参数内部对 map 的操作会影响 map 自身;而对 slice 却不会。

主要原因: 一个是指针(*hmap),一个是结构体(slice)。Go 语言中的函数传参都是值传递,在函数内部,参数会被 copy 到本地。

*hmap指针 copy 完之后,仍然指向同一个 map,因此函数内部对 map 的操作会影响实参。而 slice 被 copy 后,会成为一个新的 slice,对它进行的操作不会影响到实参。

相关推荐
HashFlag1 天前
单元测试(go)
golang·单元测试
TDengine (老段)1 天前
TDengine Go 连接器入门指南
大数据·数据库·物联网·golang·时序数据库·tdengine·涛思数据
YGGP1 天前
【Golang】LeetCode 206. 反转链表
leetcode·链表·golang
YGGP1 天前
【Golang】LeetCode 142. 环状链表 II
leetcode·链表·golang
YGGP1 天前
【Golang】LeetCode 160. 相交链表
leetcode·链表·golang
YGGP1 天前
【Golang】LeetCode 234. 回文链表
leetcode·链表·golang
Tony Bai2 天前
Go 考古:Go 官方如何决定支持你的 CPU 和 OS?
开发语言·后端·golang
技术小泽2 天前
java转go语言入门基础篇(二)
java·golang
molaifeng2 天前
深度解密 Go 语言调度器:GMP 模型精讲
开发语言·golang·gmp
技术小泽2 天前
java转go速成入门笔记篇(一)
java·笔记·golang