Golang Go语言中 arr[len(arr):]这个切片应该如何理解?

发布于 1周前 作者 bupafengyu 来自 Go语言

Golang Go语言中 arr[len(arr):]这个切片应该如何理解?
例如
arr := []int{1, 2}
fmt.Println(arr[2:])

按我理解,这个 arr[2:]应该报错吧,但实际并没有而且返回了[]int
只有到 arr[3:]才开始报错

3 回复

查了官方 Spec,

0 <= low <= high <= len(a)

因此,low 和 high 都可以等于 len(arr)

更多关于Golang Go语言中 arr[len(arr):]这个切片应该如何理解?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言中,arr[len(arr):] 这个切片表达式有其特定的含义和用途,下面我将对其进行详细解释。

首先,arr 是一个数组或者已经是一个切片(slice)。len(arr) 返回的是 arr 的长度,即它包含的元素个数。

切片表达式 arr[low:high] 用于从数组或切片 arr 中提取一个子切片,其中 low 是子切片的起始索引(包含),high 是子切片的结束索引(不包含)。

当使用 arr[len(arr):] 时,lowarr 的长度,而 high 省略了(在Go中,如果切片表达式的 high 索引被省略,则默认为切片的容量或数组的长度,但在这里由于 low 已经等于长度,所以 high 的值实际上不会影响结果)。

由于 low 等于 arr 的长度,这意味着从 arr 的末尾开始切片,因此 arr[len(arr):] 会返回一个空切片。这个空切片和原始的 arr 共享相同的底层数组,但它的长度和容量都是0,不包含任何元素。

这种切片表达式在某些情况下很有用,比如当你需要明确地表示一个空切片,或者当你需要传递一个空切片给函数,但又不希望分配新的内存空间时。

希望这个解释能帮助你更好地理解 arr[len(arr):] 在Go语言中的含义。

回到顶部