Golang Go语言切片问题求教
Golang Go语言切片问题求教
初始化切片 s := make([]int, 3) 取 s[3:] 不会报越界错误,取 s[4:]就会越界了, 求教啊
s[3:] 是扩展切片,3 代表的是个数不是下标。
我上边的不对。可能就是语言的规定吧,3 代表最后一个元素并且是空(nil?)
> 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
原因未知 :)
但是 fmt.Println(s[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
> 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
修正:len(s) 不是 len(a)
错误信息是
panic: runtime error: slice bounds out of range [4:3]
6 楼说的应该就是正确答案了.
缺少的最高位是切片长度,而最高位是开区间,取 s[3:3]的话返回一个 0 长切片,应该是一个规定吧,方便判断。
就和 s[:0]返回一个 0 长切片一样?
s[3:3]
s[4:3]