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

相关推荐
西京刀客1 小时前
golang路由与框架选型(对比原生net/http、httprouter、Gin)
http·golang·gin
Mr -老鬼1 小时前
Rust与Go:从学习到实战的全方位对比
学习·golang·rust
DICOM医学影像4 小时前
1. go语言从零实现以太坊客户端-JSON-RPC
golang·区块链·solidity·以太坊·web3.0·json-rpc·erc20
PXM的算法星球4 小时前
用 semaphore 限制 Go 项目单机并发数的一次流量控制优化实践
开发语言·后端·golang
ZNineSun5 小时前
GORM:Go的ORM 框架
golang·orm·gorm·crud
源代码•宸5 小时前
Golang语法进阶(定时器)
开发语言·经验分享·后端·算法·golang·timer·ticker
a程序小傲5 小时前
得物Java面试被问:边缘计算的数据同步和计算卸载
java·开发语言·数据库·后端·面试·golang·边缘计算
nbsaas-boot17 小时前
Go vs Java 的三阶段切换路线图
java·开发语言·golang
modelmd20 小时前
Go 编程语言指南 练习题目分享
开发语言·学习·golang
福大大架构师每日一题1 天前
2026年1月TIOBE编程语言排行榜,Go语言排名第16,Rust语言排名13。C# 当选 2025 年度编程语言。
golang·rust·c#