gpt4 book ai didi

戈朗 : Why the following code does NOT panic with "slice index out of range" error

转载 作者:IT王子 更新时间:2023-10-29 01:41:46 24 4
gpt4 key购买 nike

<分区>

package main

import "fmt"

type Point struct {
X int
Y int
}

type Points struct {
P []Point
}

func main() {
data := Points{}
for i := 0; i < 10; i++ {
data.P = append(data.P, Point{
X: i,
Y: i*2,
})
}
fmt.Printf("%+v\n", data.P[5:11]);
}

当上面的程序运行时,它打印出:

[{X:5 Y:10} {X:6 Y:12} {X:7 Y:14} {X:8 Y:16} {X:9 Y:18} {X:0 Y: 0}]

为什么有 {X:0, Y:0} 似乎是自动生成的,因为 slice 的长度是 10,但我试图得到 5:11?

我在我的代码中发现了问题并使用“原始” slice 进行测试,例如:

package main

import "fmt"

func main() {
v := []int{0,1,2,3,4,5,6,7,8,9}
fmt.Printf("%v\n", v[5:11])
}

这个简单的程序会产生错误(正如预期的那样):

panic: runtime error: slice bounds out of range

goroutine 1 [running]:
panic(0x47a8e0, 0xc42000a130)
/usr/local/go/src/runtime/panic.go:500 +0x1a1
main.main()
/home/fxr/go/src/cmhwc/test2.go:7 +0x53
exit status 2

为什么第一个程序没有 panic?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com