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

相关推荐
念何架构之路8 小时前
Go reflect 包:结构体反射 —Field、Tag 与 VisibleFields
java·数据库·golang
喵了几个咪10 小时前
GoWind Admin 拆解:一个 Sender 接口接 39 个通知渠道
微服务·golang·go·1024程序员节·admin·gowind
紧跟先前的步伐13 小时前
Go AI Agent 实战 13|大模型流式输出 Streaming 的实现
人工智能·ai·golang·1024程序员节
喵了几个咪13 小时前
GoWind Ops 深度拆解:纯出站 Agent + MQTT 信令,把「管机器、跑项目、发脚本、构建分发」做扎实
golang·gowind
紧跟先前的步伐15 小时前
Go AI Agent 实战 14|多轮对话与上下文历史管理
人工智能·ai·golang·1024程序员节
microrain15 小时前
设备报文怎么变,SagooIoT 只约定三个函数名
javascript·物联网·golang·sagooiot
紧跟先前的步伐15 小时前
Go AI Agent 实战 15|context.Context、超时与取消机制
人工智能·安全·ai·golang·1024程序员节
编程的一拳超人15 小时前
【元宝搜索开发者征文大赛】四语实战:Java/Python/Go/Node.js 构建 AI 搜索应用全攻略
java·python·golang·node.js·agent
飞鸟真人1 天前
IM网关系列(九)单账号流量统计:滑动窗口桶方案设计与Go实现
后端·golang