【发布时间】:2016-08-15 18:23:05
【问题描述】:
Go Slice 问题,如果我遗漏了什么,请查看下方并发表评论。
import "fmt"
func main() {
s := []int{2, 3, 5, 7, 11, 13}
s = s[1:]
fmt.Println(s)
s = s[2:]
fmt.Println(s)
s = s[5:]
fmt.Println(s)
}
输出:
[3 5 7 11 13]
[7 11 13]
panic: runtime error: slice bounds out of range
上面说的有道理。
func main() {
s := []int{2, 3, 5, 7, 11, 13}
s = s[:1]
fmt.Println(s)
s = s[:2]
fmt.Println(s)
s = s[:5]
fmt.Println(s)
}
输出:
[2]
[2 3]
[2 3 5 7 11]
这是否也应该从 s=s[:2] 得到数组越界恐慌?
【问题讨论】:
-
我的问题是 w.r.t 分配,当我们执行 s=s[:n] 时,我的想法是 s 被新切片覆盖,而旧数组\切片实际上已丢失,不再存在.但相反,我继续对已经切片和切块的原始数组进行切片,这似乎与 Java 不同。