猿问

切片索引超出范围但有一个空间可用

我试图弄清楚切片调整大小的工作原理,我有以下示例:


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'


一只甜甜圈
浏览 165回答 1
1回答

牛魔王的故事

该索引仅在 范围内有效0..len(b)-1。引用规范:该元件可以由整数索引来解决0通过len(s)-1。超出长度(但在容量内)的元素无法通过索引获得。如果您重新切片切片以包含这些元素(但在容量范围内),则您只能访问这些元素。
随时随地看视频慕课网APP

相关分类

Go
我要回答