2011-08-16 41 views
2

以下代碼在運行時會給出錯誤。切片索引大於長度且小於容量給出錯誤

package main 

import fmt "fmt" 

func main(){ 

    type b []int 
    var k = make([]b, 5, 10) 
    fmt.Printf("%d\n",k[8]) 
    fmt.Printf("%d", len(k)) 
} 

錯誤如下。

panic: runtime error: index out of range 

runtime.panic+0x9e /go/src/pkg/runtime/proc.c:1060 
     runtime.panic(0x453b00, 0x300203f0) 
runtime.panicstring+0x94 /go/src/pkg/runtime/runtime.c:116 
     runtime.panicstring(0x4af6c6, 0xc) 
runtime.panicindex+0x26 /go/src/pkg/runtime/runtime.c:73 
     runtime.panicindex() 
main.main+0x8d C:/GOEXCE~1/basics/DATATY~1/slice.go:9 
     main.main() 
runtime.mainstart+0xf 386/asm.s:93 
     runtime.mainstart() 
runtime.goexit /go/src/pkg/runtime/proc.c:178 
     runtime.goexit() 
----- goroutine created by ----- 
_rt0_386+0xbf 386/asm.s:80 

雖然如果k[0]k[1]被打印出來,它運行良好。你能解釋一下什麼能力意味着切片。

回答

2

你只是索引,因此指數必須小於長度。所述relevant section of the Go specification

形式的主要表達

一[X]

...

對於類型A或* A,其中A是一個數組類型,或用於S型 其中S是一個片類型的:

x必須是一個整數值和0 < = X < LEN(a)中

但是,如果您正在「切片」(例如, a[6:9]),那麼它可以處理大於長度但在容量範圍內的索引。

相關問題