go - 为什么我的两个 slice 之一会因“运行时错误:索引超出范围”而感到 panic ?

标签 go runtime-error indexoutofrangeexception panic

func main() {
        str1 := make([]string, 10)
        str2 := []string{}
        fmt.Println(str1[0]) *No error*
        fmt.Println(str2[0]) *error*
    }

为什么fmt.Println(str2[0])在Go中显示错误?

最佳答案

The Go Programming Language Specification

Index expressions

形式的主要表达

a[x]

表示数组的元素,指向数组, slice 或由a索引的字符串x的指针。值x称为索引,

如果为x,则索引0 <= x < len(a)在范围内,否则超出范围
范围

[]string{}make([]string, 0)相同。因此,0 >= len(str2)str2[0]超出范围。
package main

import (
    "fmt"
)

func main() {
    str1 := make([]string, 10)
    fmt.Println(len(str1), cap(str1), str1)
    str2 := []string{}
    fmt.Println(len(str2), cap(str2), str2)
    fmt.Println(str1[0]) // *No error*
    fmt.Println(str2[0]) // *error*
}

游乐场:https://play.golang.org/p/p31fUyb4pqW

输出:
10 10 [         ]
0 0 []

panic: runtime error: index out of range [0] with length 0

关于go - 为什么我的两个 slice 之一会因“运行时错误:索引超出范围”而感到 panic ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60426200/

相关文章:

python - 即使Jupyter中的当前单元格发生错误,如何自动执行下一个单元格?

python - 当输入超出列表范围时实现错误消息 - python

java - Golang - gomobile 基本脚本编译错误

go - 如何使用 go-redis/redis 包在 Go 中创建 Redis 事务?

java - java中的Pig UDF :Error ---ERROR 1066: Unable to open iterator for alias

java - java排列生成算法中的奇怪错误

bundles - Scripts.Render Bundle 上的 IndexOutOfRangeException

python - 在 python 中使用 pop 时获取索引超出范围错误

testing - 为什么映射值即使不是指针也会改变 - Golang

json - 为什么 golang 没有编码 json 对象?