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,对它进行的操作不会影响到实参。

相关推荐
moxiaoran57537 小时前
Go语言结构体
开发语言·后端·golang
Tony Bai14 小时前
Cloudflare 2025 年度报告发布——Go 语言再次“屠榜”API 领域,AI 流量激增!
开发语言·人工智能·后端·golang
小徐Chao努力19 小时前
Go语言核心知识点底层原理教程【变量、类型与常量】
开发语言·后端·golang
锥锋骚年19 小时前
go语言异常处理方案
开发语言·后端·golang
moxiaoran575321 小时前
Go语言的map
开发语言·后端·golang
小信啊啊21 小时前
Go语言数组
开发语言·后端·golang
IT艺术家-rookie21 小时前
golang-- sync.WaitGroup 和 errgroup.Group 详解
开发语言·后端·golang
树下水月21 小时前
Go语言编码规范
开发语言·后端·golang
laozhoy121 小时前
深入理解Golang中的锁机制
开发语言·后端·golang
moxiaoran57531 天前
Go语言的范围range
golang