在GO中重新切割切片:混淆和澄清
考慮以下代碼: int,5) printslice(“ a”,a) B:= make([] int,0,5) printslice(“ b”,b) C:= B [:2] printslice(“ C”,C) D:= C [2:5] printslice(“ D”,D) } func printslice(s String,x [] int){ fmt.printf(“%s len =%d cap =%d%v \ n”, S,Len(X),Cap(X),X) } 要理解這種行為,我們需要深入研究基礎數組的概念。在Go中,切片不存儲實際數據;相反,他們引用了基礎陣列。創建切片時,它指向了下面數組的一段。
在上面的示例中,當B創建B長度為0但容量為5時,它將5個插槽保留在一個基礎數組中。當從B創建切片C時,它將成為B的前兩個元素上的窗口。但是,基礎數組和C的能力仍然存在5,其中包括b。中未使用的插槽,通過稍微修改代碼:
int,0,5) C:= B [:2] D:= C [1:5] //這等效於D:= B [1:5] D [0] = 1 printslice(“ C”,C) printslice(“ D”,D) }在這種情況下,修改D的值還修改了C的值,證明C和D在同一基礎數組上只是不同的窗口。 [&&&&&&&&&&& && &&&華切片對於有效地處理GO中的切片至關重要。它允許您創建一個動態調整到不同數據大小的切片,而無需複製或重新定位內存。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3