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]);
}
とパニックしない理由は、プリントアウト:golang:上記のプログラムが実行されている間、次のコードは、 "範囲外のスライスインデックス" エラー
[{X:5 Y:10}、{X {X:0 Y:0}]
{X:0 Y:0} 、Y:0}スライスの長さが10になると自動的に生成されるように見えますが、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
:この単純なプログラムはエラーが(予想通り)を生成
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])
}
パニックではない?
各状況でスライスの容量を表示すると、その理由が表示されます。 – JimB