切片到数组指针的转换

Conversion of slice to array pointer

提问人:overexchange 提问时间:8/8/2022 最后编辑:iczaoverexchange 更新时间:8/8/2022 访问量:608

问:

规范中所述,将切片转换为数组指针会生成指向切片基础数组的指针。

s := make([]byte, 2, 4)
s0 := (*[0]byte)(s)      // s0 != nil

但是编译器给出错误:cannot convert s (variable of type []byte) to *[0]byte

数组 Go 指针 类型转换 切片

评论


答:

5赞 icza 8/8/2022 #1

此转换已添加到 Go 1.17 中的语言中。

语言更改

Go 1.17 包括对语言的三个小改进。

  • 从切片指针到数组指针的转换:现在可以将 type 的表达式转换为数组指针类型。如果是这种转换的结果,则范围内的相应索引引用相同的基础元素:。如果小于 ,则转换会崩溃。s[]T*[N]Ta&a[i] == &s[i] for 0 <= i < Nlen(s)N
  • [...]

这意味着您需要 Go 1.17 或更高版本才能使用此类转换。它在 Go Playground 上运行良好(目前 Playground 使用最新的 Go 1.19)。

评论

0赞 overexchange 8/8/2022
我正在使用 go 1.16.9 进行测试