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

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

Mary-Kate Olsen
发布: 2024-12-05 03:43:14
原创
809 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板