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

相关推荐
福大大架构师每日一题44 分钟前
2026-01-15:下一个特殊回文数。用go语言,给定一个整数 n,求出一个比 n 更大的最小整数,该整数需要满足两条规则: 1. 它的十进制表示从左到右与从右到左完全一致(即读起来是对称的)。 2
python·算法·golang
Aerkui1 小时前
Go 泛型(Generics)详解
开发语言·后端·golang
clive.li1 小时前
go-webmvc框架推荐
开发语言·后端·golang
有代理ip1 小时前
常见数据采集问题及实操解决方案
爬虫·网络协议·http·golang·ssl
2501_941982058 小时前
马年 Go 篇:高并发企微机器人开发实战
开发语言·golang·企业微信
Mr -老鬼8 小时前
基于 Go 的脚本平台 APP 云控系统
开发语言·后端·golang
大鹏说大话9 小时前
深入理解 Go 中的 make(chan chan error):高阶通道的典型用法与实战场景
开发语言·后端·golang
Maguyusi1 天前
go 批量生成c++和lua proto文件
c++·golang·lua·protobuf
天空属于哈夫克31 天前
Go 开发:企微外部群主动发送消息
开发语言·golang·企业微信