【发布时间】:2011-10-28 08:34:45
【问题描述】:
做了一个容量小于长度的切片
包主 导入 fmt "fmt" 函数主(){ 类型 b []int var k = make([]b, 10, 5) fmt.Printf("%d\n",k[8]) }这在尝试运行时会出现以下错误。
恐慌:运行时错误:makelice:上限超出范围 runtime.panic+0x9e /go/src/pkg/runtime/proc.c:1060 runtime.panic(0x453b00, 0x30020390) runtime.panicstring+0x94 /go/src/pkg/runtime/runtime.c:116 runtime.panicstring(0x4afd6c, 0x40d80c) runtime.makeslice+0x70 /go/src/pkg/runtime/slice.c:24 runtime.makeslice(0x44302c, 0xa, 0x0, 0x5, 0x0, ...) main.main+0x45 C:/GOEXCE~1/basics/DATATY~1/slice.go:8 main.main() 运行时.mainstart+0xf 386/asm.s:93 运行时.mainstart() runtime.goexit /go/src/pkg/runtime/proc.c:178 运行时.goexit() ----- goroutine 创建者 ----- _rt0_386+0xbf 386/asm.s:80我的问题是容量可以小于长度吗?
如果“是”,那么为什么会出现此错误?
如果“否”,那么为什么这是运行时错误,为什么不是编译时错误?
【问题讨论】:
标签: go