这一段时间在学习golang
看到slice这个地方有一些不是特别明白
func main() {
array := [5]int{0, 1, 2, 3, 4}
slice1 := array[5:]
slice2 := array[6:]
fmt.Println(slice1, slice2)
}
为什么第一个去的slice的成功了
第二个却失败了呢
是什么原因呢??
这一段时间在学习golang
看到slice这个地方有一些不是特别明白
func main() {
array := [5]int{0, 1, 2, 3, 4}
slice1 := array[5:]
slice2 := array[6:]
fmt.Println(slice1, slice2)
}
为什么第一个去的slice的成功了
第二个却失败了呢
是什么原因呢??
看到这个问题,我觉得两个都应该报错,但实验了一下,发现结果却是题主所描述的那样,所以只能从结果去推测了。
比较认同 @linuxr 说的:slice 或者(array) 中 [x:y] 的取值范围就是:0≤x≤y≤len(slice/array),是由 golang 的语法规定的。
因为 slice 操作 slice[n:m]
,实际取值是: [n,m) 这些元素,所以如果要取n下标之后的所有元素,有两种做法: [n:]
或 [n:len(slice)]
, 这意味着 :
右边的值必须能填 len(slice) 的大小。
但是,个人觉得 :
左边的值却没有这个必要,也就是上面的例子中第一个 array[5:]
,比较好的做法应该是报错而不是返回0个元素的slice.
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答3.4k 阅读
2 回答879 阅读✓ 已解决
2 回答2.2k 阅读
1 回答2.1k 阅读
slice 或者(array) 中 [x:y] 的取值范围就是:0≤x≤y≤len(slice/array)
这是由 golang 的语法规定的