首页 >后端开发 >Golang >为什么在 Go 中切片 `b[1:]` 会导致越界错误?

为什么在 Go 中切片 `b[1:]` 会导致越界错误?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-05 03:43:14763浏览

Why Does Slicing `b[1:]` Cause an Out-of-Bounds Error in Go?

切片:Go 中的越界错误

执行以下代码时:

package main

import "fmt"

func main() {
    a := make([]int, 5)
    printSlice("a", a)
    b := make([]int, 0, 5)
    printSlice("b", b)
    c := b[1:]
    printSlice("c", c)
}


func printSlice(s string, x []int) {
    fmt.Printf("%s len=%d cap=%d %v\n",
        s, len(x), cap(x), x)
}

你遇到“越界”错误。出现此错误的原因是创建 c 切片时的切片表达式无效。

在 Go 中,对数组或切片进行切片遵循以下规则:

  • 如果 0
  • 则索引在范围内。对于数组或字符串,= low 对于切片,上索引边界默认为切片容量 (cap(a)) 而不是其长度。

切片表达式 b[1:] 尝试创建一个下界为 1 的新切片 c。但是,缺少上限,默认为 b 的长度,即 0。这会导致切片的下限大于上限,从而导致“越界”错误。

要纠正此错误,必须确保切片表达式的上限大于或等于下限。例如,您可以使用以下表达式创建有效的切片 c:
c := b[1:2]

这将创建下限为 1、上限为 2 的切片 c,由于 1 ,因此有效。 = 2

以上是为什么在 Go 中切片 `b[1:]` 会导致越界错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn