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/