初始化切片 s := make([]int, 3) 取 s[3:] 不会报越界错误,取 s[4:]就会越界了, 求教啊
1
Leigg 2019 年 10 月 3 日 via Android
这个还真没碰见过,是冷知识?
|
2
c0011 2019 年 10 月 3 日
s[3:] 是扩展切片,3 代表的是个数不是下标。
|
3
c0011 2019 年 10 月 3 日
我上边的不对。可能就是语言的规定吧,3 代表最后一个元素并且是空(nil?)
|
4
kidlj 2019 年 10 月 3 日
> For arrays or strings, the indices are in range if 0 <= low <= high <= len(a), otherwise they are out of range. For slices, the upper index bound is the slice capacity cap(a) rather than the length.
ref: https://golang.org/ref/spec#Slice_expressions 原因未知 :) |
6
kidlj 2019 年 10 月 3 日 > The indices low and high select which elements of operand a appear in the result. The result has indices starting at 0 and length equal to high - low
> For convenience, any of the indices may be omitted. A missing low index defaults to zero; a missing high index defaults to the length of the sliced operand. 因此 s[3:] == s[3:len(a)] = s[3:3] ✓ s[4:] == s[4:len(a)] == s[4:3] x |
7
kidlj 2019 年 10 月 3 日 @c0011
> the index x is in range if 0 <= x < len(a), otherwise it is out of range ref: https://golang.org/ref/spec#Index_expressions |
8
kidlj 2019 年 10 月 3 日
修正:len(s) 不是 len(a)
|
9
gamexg 2019 年 10 月 3 日 via Android 故意的吧,
如果 s[3:]就报错,就无法取末尾的空切片了。 |
10
Vegetable 2019 年 10 月 3 日
错误信息是
panic: runtime error: slice bounds out of range [4:3] 6 楼说的应该就是正确答案了. |
11
shijiu 2019 年 10 月 3 日
缺少的最高位是切片长度,而最高位是开区间,取 s[3:3]的话返回一个 0 长切片,应该是一个规定吧,方便判断。
就和 s[:0]返回一个 0 长切片一样? |
12
dreampuf 2019 年 10 月 4 日
|
13
Carseason 2019 年 10 月 4 日
s[3:3]
s[4:3] |