Closed quanhengzhuang closed 5 years ago
上下文: https://tour.go-zh.org/moretypes/11
在上一节中 https://tour.go-zh.org/moretypes/10 写道:
切片下界的默认值为 0,上界则是该切片的长度。
但其实只要不超过cap,就不会报错。但这样操作很容易出问题,不知道go为什么不判断一下len。
go ss := []int{1, 2, 3, 4, 5} //此时len=2,cap=4 ss = ss[1:3] printSlice(ss) //4超过了len,但并不会报错 ss = ss[2:4] printSlice(ss) //这次会报错,因为5超过了cap ss = ss[3:5] printSlice(ss)
因为你第一次其实是从底层数组上切下来的切片,第二次才是在第一次的切片上再切的。详见 https://golang.org/ref/spec#Slice_types
上下文: https://tour.go-zh.org/moretypes/11
在上一节中 https://tour.go-zh.org/moretypes/10 写道:
但其实只要不超过cap,就不会报错。但这样操作很容易出问题,不知道go为什么不判断一下len。
go ss := []int{1, 2, 3, 4, 5} //此时len=2,cap=4 ss = ss[1:3] printSlice(ss) //4超过了len,但并不会报错 ss = ss[2:4] printSlice(ss) //这次会报错,因为5超过了cap ss = ss[3:5] printSlice(ss)