go - slice 索引超出范围但有一个空间可用

标签 go slice

我想弄清楚 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 through len(s)-1.

超出长度(但在容量范围内)的元素无法通过索引获取。如果您 reslice,您只能访问这些元素包含这些元素的 slice (但在容量范围内)。

关于go - slice 索引超出范围但有一个空间可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29940968/

相关文章:

arrays - 使用切片和使用对数组的引用作为参数有什么区别?

go - 定时循环如何工作?

go - 查询 "latest"没有与本地包匹配的版本

go - 在 Go 中使用指向字符串的指针而不是字符串有什么好处

javascript - 如何返回字符串的最后两个字符以外的所有字符?

python - 无法理解如何通过列表切片将字符串中的字符分配给列表在以下代码段中工作

go - 如何解决与此错误消息的冲突?

elasticsearch - DeleteByQuery ElasticSearch Golang 错误 elastic : Error 404 (Not Found)

python - 在 pandas 中切片串联数据框

python - 从列表中获取匹配的字符串并创建新列表