正如在Spec中提到的,将片转换为数组指针会产生指向片的底层数组的指针.

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

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

推荐答案

这一转换是在Go 1.17年添加到语言中的.

对语言的更改

Go 1.17包括对该语言的三个小增强.

  • Conversions from slice to array pointer:现在可以将类型[]T的表达式s转换为数组指针类型*[N]T.如果a是这种转换的结果,则在范围内的对应索引引用相同的基础元素:&a[i] == &s[i] for 0 <= i < N.如果len(s)小于N,则转换会引发panic .
  • [.]

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

Go相关问答推荐

golang父进程的副本无法进行https/tls调用并获得tls:未能验证证书""

Golang ==错误:OCI运行时创建失败:无法启动容器进程:exec:./" bin:stat./" bin:没有这样的文件或目录:未知

golang 的通用 map 功能

带有一个新变量的Go冒号等于运算符

Python样式生成器实现为通道:过早读取

golang regex基于关键字拆分字符串

如何使用 html/template 在 golang 中运行一个范围内的范围

使用GOTK3和librsvg在Go中如何加载内联SVG?

GORM中是否可能自动迁移具有循环关系的表?

Golang校验器包:重命名字段错误处理

为什么我只收到部分错误而不是我启动的 goroutines 的所有错误?

最长连续重复的字符golang

使用 LINQ 对内部数组进行排序

从 Makefile 运行时权限被拒绝

如何使用 Go 获取 X11 中的窗口列表

如何将多个切片打印为一个切片?

Golang Echo Labstack 如何在模板视图中调用函数/方法

Golang SSH客户端错误无法验证,try 的方法[无公钥],没有支持的方法

Golang API 的 HTTPS

try 执行`go test ./... -v`时,Golang中有没有办法设置标志