插件窝 干货文章 Go语言切片索引:访问索引1却不会报错,为什么?

Go语言切片索引:访问索引1却不会报错,为什么?

切片 索引 长度 访问 164    来源:    2025-03-14

在Go语言中,切片(slice)是一种动态数组,它提供了对数组的灵活访问。切片的索引从0开始,到len(slice)-1结束。如果你访问一个切片的索引1,而切片的长度至少为2,那么访问索引1是合法的,不会报错。

然而,如果你访问的索引超出了切片的长度范围(即索引小于0或大于等于len(slice)),Go语言会触发一个运行时错误(panic),并抛出index out of range的异常。

示例代码

package main

import "fmt"

func main() {
    // 创建一个长度为3的切片
    slice := []int{10, 20, 30}

    // 访问索引1,这是合法的
    fmt.Println(slice[1]) // 输出: 20

    // 访问索引3,这会触发panic,因为索引超出了切片的长度范围
    fmt.Println(slice[3]) // 这会触发panic: index out of range
}

为什么访问索引1不会报错?

  1. 切片长度足够:如果你访问索引1,而切片的长度至少为2(即len(slice) >= 2),那么访问索引1是合法的,不会报错。
  2. 索引范围检查:Go语言在运行时会对切片的索引进行范围检查。如果索引在合法范围内(0 <= index < len(slice)),则允许访问;否则会触发panic。

总结

访问切片索引1不会报错,前提是切片的长度至少为2。如果切片的长度不足,或者索引超出了切片的长度范围,Go语言会触发运行时错误。因此,在访问切片时,确保索引在合法范围内是非常重要的。

如果你不确定切片的长度,可以使用len(slice)来获取切片的长度,并在访问索引之前进行检查。