为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
江户川乱折腾 2021-05-09 13:19:59
是否可以将某个值的指针转换为分片?例如,我想从单字节读取io.Reader到uint8变量。io.Reader.Read接受一个slice作为其参数,所以我不能像在C中那样简单地为其提供一个指向变量的指针。我认为从指针创建长度为1,容量为1的切片是安全的操作。显然,它应该与从长度为1的数组创建切片相同,这是允许的操作。有没有简单的方法可以用普通变量做到这一点?或者,也许我听不懂某事,并且有某些原因为什么要禁止这样做?
查看完整描述

3 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

切片不仅是指针,就像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))[:] )


查看完整回答
反对 回复 2021-05-17
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

为什么不使用简单的解决方案,而不是使这个琐碎的任务复杂化呢?即传递。读取一个length-1的slice,然后将其第零个元素分配给您的变量。


查看完整回答
反对 回复 2021-05-17
  • 3 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信