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

相关推荐
Wy_编程38 分钟前
Go语言中的指针
开发语言·后端·golang
lolo大魔王1 小时前
Go语言数据库操作之GORM框架从入门到生产实战(完整版)
开发语言·数据库·golang
GDAL2 小时前
Go mod tidy 完整教程:从入门到精通
golang·tidy
lolo大魔王2 小时前
Go 语言 Web 框架 Gin 入门详解
前端·golang·gin
XMYX-05 小时前
29 - Go time 时间模块详解:时间处理、定时控制与底层设计
开发语言·golang
念何架构之路20 小时前
Go语言常见并发模式
开发语言·后端·golang
XMYX-020 小时前
26 - Go recover 捕获错误:优雅恢复的真正意义
开发语言·golang
XMYX-01 天前
27 - Go string 字符串处理与格式化:从底层原理到工程实践
开发语言·golang
lolo大魔王1 天前
Go 语言原生 SQL 操作 MySQL 超详细全解 + 生产级项目模板(纯官方库无ORM)
数据库·sql·golang
Java面试题总结2 天前
Go 里什么时候可以“panic”?
开发语言·后端·golang