如果我用(例如)創建一個切片mySlice := make([]int, 5, 10)然后我假設一個類型的數組[10]int是靜默創建的,并且我收到一個“看到”前 5 個整數的切片。(對嗎?Go 文檔并沒有用這種方式表達它,但是由于切片必須始終在某處有一個底層數組,我不知道它怎么可能是其他方式。)所以我相信以上是簡寫:var myArray [10]int
mySlice := myArray[0:5]但是當我使用第一種方法時,我沒有數組的句柄。有沒有辦法從切片中獲取它?
2 回答

智慧大石
TA貢獻1946條經驗 獲得超3個贊
我不確定你想要什么樣的“句柄”,但數組在 Go 中是按值傳遞的。因此,如果您有一個將數組作為參數的函數,則只需將切片中的數據復制到數組中,然后傳遞數組即可。當您將數組傳遞給函數時,無論如何都會復制該數組。
如果您自己的代碼想要處理數組,那么它可以對切片執行所有操作,就像處理數組一樣。
沒有 unsafe 你唯一不能做的就是創建一個指向數組的指針——但你可以用 unsafe 輕松做到這一點:
arrayPtr := (*[10]int)(unsafe.Pointer(&mySlice[0]))
- 2 回答
- 0 關注
- 298 瀏覽
添加回答
舉報
0/150
提交
取消