是否可以將某個值的指針轉換為分片?例如,我想從單字節讀取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))[:] )
- 3 回答
- 0 關注
- 179 瀏覽
添加回答
舉報
0/150
提交
取消