我正在研究一个学术问题,并且 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
动漫人物
相关分类