在 go 中的 unsafe.SliceData 函数的文档中,它说:
返回指向参数底层数组的指针 切片。SliceData
- 如果
> 0,cap(slice)
返回SliceData
。&slice[:1][0]
返回
&slice[:1][0]
而不是&slice[0]
背后的逻辑是什么?据我所知(并且我的测试确认),两者都会返回相同的地址。 Go 开发者选择使用前者而不是后者有什么具体原因吗?
切片可能具有正容量 (
cap(slice) > 0
),但它可能具有 0
长度。像 slice[0]
这样对其进行索引会导致运行时恐慌。
如果切片具有正容量,您可以像
slice[:1]
那样对其进行切片,这将导致切片的长度为 1
,并且您可以像 slice[0]
那样对其进行索引,而不会导致运行时恐慌。