登录
首页 >  Golang >  Go问答

恐慌:运行时错误:切片边界超出范围

来源:stackoverflow

时间:2024-04-13 16:45:41 390浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《恐慌:运行时错误:切片边界超出范围》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

我正在解决一个学术问题,并且出现了 go 恐慌。 该代码将查找字符串的中间字符。

func findmiddle(s string) string {
    len := len(s)
    half := len / 2

    if len == 0 {
        panic("zero")
    }

    if len%2 == 0 {
        fmt.println("#53:" + s)
        str := s[half-1:1] + s[half:1]
        fmt.println("even: " + str)
        return str
    } else {
        fmt.println("#58: " + s)
        str := s[half:1]
        fmt.println("odd: " + str)
        return str
    }
}

我的调试输出如下所示:

#58: 1
Odd: 1
#58: 2
Odd: 2
#58: 5
Odd: 5
#53:13
Even: 1
#53:89
Even: 8
#58: 233
Odd: 
#53:1597
panic: runtime error: slice bounds out of range [2:1]

goroutine 1 [running]:
main.findMiddle(0xc00001a200, 0x4, 0xc00001a200, 0x4)
        /home/peter/work/src/misc2/prime-recursion-strings/main.go:68 +0x403
main.iterate(0x4f8bc0, 0xc00009c008)
        /home/peter/work/src/misc2/prime-recursion-strings/main.go:30 +0x92
main.main()
        /home/peter/work/src/misc2/prime-recursion-strings/main.go:17 +0xa3
exit status 2

正如您所看到的,代码在发生恐慌之前运行了多次迭代。

有任何关于正在发生的事情的线索吗? 在这里测试代码:https://play.golang.org/p/_k1divjst3f


解决方案


[2:1] 是无效的切片索引。正确的格式是 [low:high],因此第二个数字必须始终大于(或等于)第一个数字。这就是你感到恐慌的原因。

解决方案是替换:

        str := s[half-1:1] + s[half:1]

与:

        str := s[half-1:half] + s[half:half+1]

Playground,可以进一步简化为:

        str := s[half-1:half+1]

playground

理论要掌握,实操不能落!以上关于《恐慌:运行时错误:切片边界超出范围》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

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