在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