GoMap和Slice:值还是指针?
时间:2025-03-01 11:30:08 501浏览 收藏
Go语言中Map和Slice变量的存储方式一直是开发者关注的焦点。本文深入探讨了Go语言Map和Slice究竟存储的是值还是地址。通过分析`fmt.Printf("%p", mapVar)`打印结果,揭示Map变量存储的是其底层数据结构的内存地址,而非键值对的地址;而Slice变量打印的则是其底层数组的内存地址,而非Slice结构体本身的地址。 理解其底层实现机制,才能更好地掌握Go语言Map和Slice的使用,避免潜在的内存管理问题。
Go语言Map和Slice变量存储的是什么?
Go语言中,Map
和Slice
变量的存储方式常常令人困惑。它们究竟存储的是值本身,还是值的地址?
通过fmt.Printf("%p", mapVar)
这样的方式打印Map
变量及其地址,会发现两者地址不同。这表明,Map
变量存储的是其底层数据结构的地址,而非键值对的直接地址。make
函数创建Map
时返回的是指向该数据结构的指针,因此打印结果显示的是指针地址。
Slice
的情况略有不同。使用fmt.Printf("%p", sliceVar)
打印Slice
变量,同样得到一个指针地址。但这并非因为make
返回指针(make
返回的是Slice
结构体),而是因为fmt.Printf
对Slice
类型的特殊处理:它直接获取并打印Slice
底层数组的地址。
总结:
- Map: 存储的是其底层数据结构的内存地址。
- Slice:
fmt.Printf("%p", sliceVar)
打印的是其底层数组的内存地址,而非Slice
结构体本身的地址。
因此,虽然两者打印结果都是地址,但其背后的机制有所差异。 理解Map
和Slice
的底层实现,才能更准确地把握其存储方式。
文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《GoMap和Slice:值还是指针?》文章吧,也可关注golang学习网公众号了解相关技术文章。
-
505 收藏
-
502 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
394 收藏
-
219 收藏
-
262 收藏
-
217 收藏
-
429 收藏
-
317 收藏
-
455 收藏
-
466 收藏
-
280 收藏
-
253 收藏
-
150 收藏
-
198 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习