使用指向值的指针作为切片

是否可以将某个值的指针转换为分片?

例如,我想从单字节读取io.Readeruint8变量。io.Reader.Read接受一个slice作为其参数,所以我不能像在C中那样简单地为其提供一个指向变量的指针。

我认为从指针创建长度为1,容量为1的切片是安全的操作。显然,它应该与从长度为1的数组创建切片相同,这是允许的操作。有没有简单的方法可以用普通变量做到这一点?或者,也许我听不懂某事,并且有某些原因为什么要禁止这样做?


江户川乱折腾
浏览 158回答 3
3回答

郎朗坤

切片不仅是指针,就像C中的数组一样。它还包含数据的长度和容量,如下所示:struct {  ptr *uint8  len int  cap int}因此,是的,您将需要创建一个切片。创建切片的最简单方法var a uint8是[]uint8{a}a := uint8(42)fmt.Printf("%#v\n", []uint8{a})(但是在重读您的问题之后,这并不是全部的解决方案)但是,如果您希望从变量创建切片,并指向相同的内存空间,则可以使用该unsafe包。不建议这样做。fmt.Printf("%#v\n", (*[1]uint8)(unsafe.Pointer(&a))[:] )

喵喵时光机

为什么不使用简单的解决方案,而不是使这个琐碎的任务复杂化呢?即传递。读取一个length-1的slice,然后将其第零个元素分配给您的变量。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go