首頁 > 後端開發 > Golang > 切片與Go中的切片

切片與Go中的切片

王林
發布: 2024-02-05 23:42:03
轉載
438 人瀏覽過

切片與Go中的切片

問題內容

在go中的unsafe.SliceData函數的文件中,它說:

SliceData returns a pointer to the underlying array of the argument
slice.

If cap(slice) > 0, SliceData returns &slice[:1][0].

登入後複製

回傳 &slice[:1][0] 而不是 &slice[0] 背後的邏輯是什麼?據我所知(並且我的測試證實),兩者都會返回相同的地址。 Go 開發者選擇使用前者而不是後者有什麼具體原因嗎?


正確答案


切片可能具有正容量(cap(slice) > 0),但同時可能有0 長度。像 slice[0] 一樣對其進行索引會導致運行時恐慌。

如果切片具有正容量,您可以像slice[:1] 那樣對其進行切片,這將產生長度為1 的切片,並且您可以像result[0] 那樣對結果進行索引,而不會導致運行時恐慌。

例如:

slice := make([]int, 0, 5)
fmt.Println(&slice[0])
登入後複製

這會導致:

panic: runtime error: index out of range [0] with length 0
登入後複製

但這有效:

fmt.Println(&slice[:1][0])
登入後複製

以上是切片與Go中的切片的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板