当前位置: 首页 > 面试题库 >

在打印/访问超出范围的切片索引时不会出现恐慌

龚志
2023-03-14
问题内容

package main

import "fmt"

func main() {
    is := []int{1, 2}

    fmt.Println(is[2:]) // no panic here - this includes is[2] which is out of bound still no panic
    fmt.Println(is[3:]) // but panic here
    fmt.Println(is[2]) // panic here which is acceptable
}

在上面提到的程序中,即使我们正在从is [2]到on病房访问元素,并且片中只有2个元素,也没有为is [2:]感到恐慌。为什么会这样呢?


问题答案:

切片表达式的go规范阐明了切片所用索引的要求:

如果0 <=低<=高<=最大<= cap(a),则索引在范围内,否则它们超出范围。

对于索引表达式,相关要求是:

如果0 <= x <len(a),则索引x处于范围内,否则超出范围

你的切片有len(a) == cap(a) == 2。您的三个测试用例是:

  • 切片low == 2等于cap(a)范围内
  • 切片low == 3大于cap(a)超出范围
  • 索引x == 2等于len(a)超出范围


 类似资料:
  • 我试着运行这个: 但是得到这个错误: 回溯(最后一次调用): 文件“C:\Users\Shakh\Desktop\Hello3.py”,第4行,在 打印(“Hallo”,sys.argv[1]) 索引器:列表索引超出范围

  • 问题内容: 我有以下功能,该功能从终端接收命令并根据输入显示内容。看起来很简单,如果用户键入“ add”,则系统将打印一行,如果用户未键入任何内容,则将打印其他内容。 只要用户类型添加,它就起作用。如果用户未输入任何内容,则会引发 紧急情况:运行时错误:GoLang中的索引超出范围 为什么是这样? 问题答案: 如果用户不提供任何输入,则该数组为空。这意味着即使索引超出范围,也无法访问。 您可以在检

  • 问题内容: 我正在遍历Go语言之旅中的练习,但遇到了我无法弄清的障碍。我在做这个错误: 这是我的代码: 对于我一生,我找不到问题! 问题答案: 切片 对于字符串,数组,指向数组的指针或切片a,主表达式 a [低:高] 构造一个子字符串或切片。索引表达式low和high选择哪些元素出现在结果中。结果的索引从0开始,长度等于高-低。 对于数组或字符串,索引low和high必须满足0 <= low <=

  • 问题内容: 在玩数组切片时,我注意到切片的类型不会产生数组索引超出字符串的界限错误。 产生输出: 有人可以解释为什么吗?它不应该产生超出范围的数组索引错误吗?如果我尝试做类似的事情,Python会产生这个错误。 问题答案: 切片用于创建新列表 。如果索引不在列表中元素的数量范围内,我们可以返回一个空列表。因此,我们不必抛出错误。 但是,如果尝试访问列表中大于元素数量的元素,则无法返回任何默认值(即

  • 我有一个bean,我用它作为传输对象。bean的类定义为- 我正在使用这个bean,在带有Model属性注释的Spring控制器中。对于JSP,我有JSTL。我已经用这样的字段填充了JSP。 当我提交表单时,我得到Java . lang . indexoutofboundsexception:Index:0,Size: 0。

  • 问题内容: 因此,我正在编写一个简单的程序来输入字符串并计算总数。的米 所以,这是我的代码 where 和str是我接受过的字符串,但是此错误不断出现 这是什么错误以及如何将其删除? 问题答案: 字符串,有效索引从0到n-1; 更改 至