为什么切片的左边可以是数组的长度,按照道理来说应该越界了呀? package main import "fmt" func main() { var s = "whaomi" var bs = []byte(s) fmt.Println(bs[len(s):]) // error // fmt.Println(bs[len(s)+1:]) } 数组长度是 6 ,按照 0 下标开始最后一位应该是 5 ,但是却可以使用切片从 6 开始 bs[len(s):] Code fmt, len, 切片, println
By ChatGPT3.5: 在你的代码中,bs 是从字符串 s 创建的字节切片。当你使用 bs[len(s):] 访问超出切片有效范围的元素时,它不会导致 panic 。相反,它将返回一个空的切片,不会引发运行时错误。 因此,fmt.Println(bs[len(s):]) 这一行不会引发 panic ,它将打印一个空的字节切片 []。 但是,如果你取消注释 // fmt.Println(bs[len(s)+1:]) 这一行并尝试访问超出切片有效范围更远的元素,你会在编译时出现错误,因为你试图访问切片范围之外的元素。Go 的编译器会捕获这个错误,阻止你构建程序。