问题内容
在go中的unsafe.SliceData函数的文档中,它说:
SliceData returns a pointer to the underlying array of the argument
slice.
If cap(slice) > 0, SliceData returns &slice[:1][0].
返回 &slice[:1][0]
而不是 &slice[0]
背后的逻辑是什么?据我所知(并且我的测试证实),两者都会返回相同的地址。 Go 开发者选择使用前者而不是后者有什么具体原因吗?
正确答案
切片可能具有正容量(cap(slice) > 0
),但同时可能具有 0
长度。像 slice[0]
一样对其进行索引会导致运行时恐慌。
如果切片具有正容量,您可以像 slice[:1]
那样对其进行切片,这将产生长度为 1
的切片,并且您可以像 result[0]
那样对结果进行索引,而不会导致运行时恐慌。
例如:
slice := make([]int, 0, 5)
fmt.Println(&slice[0])
这会导致:
panic: runtime error: index out of range [0] with length 0
但这有效:
fmt.Println(&slice[:1][0])
以上就是切片与Go中的切片的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数260
191.63 KB下载数245
143.91 KB下载数1139
183.71 KB下载数640
644.84 KB下载数2752
相关文章
发现更多好内容猜你喜欢
AI推送时光机Go 语言中 nil 切片、非 nil 切片、空切片
后端开发2024-02-08
在go中重新切片2d切片
后端开发2024-04-05
Go中的nil切片和空切片区别详解
后端开发2022-06-07
Go语言中的数组与切片介绍
后端开发2024-04-02
Go 中的切片类型转换
后端开发2024-02-10
python中的切片
后端开发2023-09-20
Go数组与切片轻松掌握
后端开发2022-11-21
聊聊go语言中的切片(slice)
后端开发2022-07-04
Go语言中切片与变量的区别详解
后端开发2024-04-02
Go - 将指向结构切片的指针转换为接口切片
后端开发2024-02-09
理解Go语言中切片与变量的区别
后端开发2024-04-02
Go 语言中怎么实现数组与切片
后端开发2023-06-15
Go基础系列:Go切片(分片)slice详解
后端开发2024-04-02
go语言中的二维切片赋值
后端开发2022-06-07
咦!没有更多了?去看看其它编程学习网 内容吧