Go 一个切片只有一个元素,名为list,为什么子切片list[1:]可以工作?

Go 一个切片只有一个元素,名为list,为什么子切片list[1:]可以工作?,go,Go,一个切片只有一个元素,名为list,为什么子切片list[1:]可以工作? 例如: list := []int{1} fmt.Println(list[1:]) fmt.Println(list[1]) 列表中没有索引为1的元素,因此第三行导致“恐慌:运行时错误:索引超出范围”,但是为什么第二行工作得很好呢?嗯,语言只是将其定义为有效 将subslice中使用的索引视为指向“元素之间”: Slice a Elements: | 0 | 1 | 2 | 3 | 4 | 5 | Subslic

一个切片只有一个元素,名为list,为什么子切片list[1:]可以工作? 例如:

list := []int{1}
fmt.Println(list[1:])
fmt.Println(list[1])
列表中没有索引为1的元素,因此第三行导致“恐慌:运行时错误:索引超出范围”,但是为什么第二行工作得很好呢?

嗯,语言只是将其定义为有效

将subslice中使用的索引视为指向“元素之间”:

Slice a Elements:   | 0 | 1 | 2 | 3 | 4 | 5 |
Subslice a[2:]              ^===============
Subslice a[2:4]             ^===========^
Subslice a[6:]                              ^

空切片的列表[1:]切片。

一个切片可以有零个元素<代码>列表[1://code>就是这样一个切片的例子。