slice[:1][0] 与 go 中的 slice[0]

问题描述 投票:0回答:1

在 go 中的 unsafe.SliceData 函数的文档中,它说:

SliceData
返回指向参数底层数组的指针 切片。

  • 如果
    cap(slice)
    > 0,
    SliceData
    返回
    &slice[:1][0]

返回

&slice[:1][0]
而不是
&slice[0]
背后的逻辑是什么?据我所知(并且我的测试确认),两者都会返回相同的地址。 Go 开发者选择使用前者而不是后者有什么具体原因吗?

go pointers slice
1个回答
0
投票

切片可能具有正容量 (

cap(slice) > 0
),但它可能具有
0
长度。像
slice[0]
这样对其进行索引会导致运行时恐慌。

如果切片具有正容量,您可以像

slice[:1]
那样对其进行切片,这将导致切片的长度为
1
,并且您可以像
slice[0]
那样对其进行索引,而不会导致运行时恐慌。

© www.soinside.com 2019 - 2024. All rights reserved.