登录
首页 >  Golang >  Go问答

当切片索引超出范围时程序不会崩溃

来源:stackoverflow

时间:2024-03-12 23:42:29 380浏览 收藏

哈喽!今天心血来潮给大家带来了《当切片索引超出范围时程序不会崩溃》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

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 wards 的元素并且切片只有 2 个元素,is[2:] 也不会出现恐慌。为什么会这样?


解决方案


go spec on slice expressions 详细说明了切片中使用的索引的要求:

如果 0 <= low <= high <= max <= cap(a),则索引在范围内,否则索引超出范围。

对于index expressions,相关要求是:

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

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

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

终于介绍完啦!小伙伴们,这篇关于《当切片索引超出范围时程序不会崩溃》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>