我想弄清楚 slice 大小调整是如何工作的,我有以下示例:
package main
import (
"fmt"
)
func main() {
s := []byte{'A', 'W', 'T', 'Q', 'X'}
b := s[2:4]
fmt.Println(s, len(s), cap(s))
fmt.Println(string(b), len(b), cap(b))
b[1] = 'H'
b[2] = 'V'
fmt.Println(string(b))
}
编译器提示:
panic: runtime error: index out of range
b
的容量为3
,为什么我不能像
b[2] = 'V'
最佳答案
索引只在0..len(b)-1
范围内有效。引用自 spec :
The elements can be addressed by integer indices
0
throughlen(s)-1
.
超出长度(但在容量范围内)的元素无法通过索引获取。如果您 reslice,您只能访问这些元素包含这些元素的 slice (但在容量范围内)。
关于go - slice 索引超出范围但有一个空间可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29940968/