Slice Expression#
备注
Slice expr 只是创建「数据的视图」,不会开辟新空间
和 Python 不同,Go 的 slice expr 会导致 out of range panic, 但对于 low 和 high 来说 “range” 的定义是不同的
Out of Range#
low 和 high 的取值范围如下,超出返回会导致 panic:
- low:
[0, len)
- high:
[0, cap)
s := make([]int, 1, 5)
// 0 <= low < len(s)
_ = s[0:] // ✅ OK
_ = s[1:] // ✅ OK
// _ = s[2:] // ⚠️ PANIC
// 0 <= high < cap(s)
_ = s[:0] // ✅ OK
_ = s[:2] // ✅ OK
_ = s[:5] // ✅ OK
// _ = s[:6] // ⚠️ PANIC
Extend Capacity#
利用 high 的取值范围可以将 slice 长度扩张到其容量上限:
s = s[:cap(s)]
s1 := make([]int, 1, 5)
s2 := s1[:cap(s1)]
// [len/cap]addr
println(s1) // [1/5]0xc000048748
println(s2) // [5/5]0xc000048748
评论
如果你有任何意见,请在此评论。 如果你留下了电子邮箱,我可能会通过 回复你。