2017-07-25 90 views

回答

1

它沒有「超過」長度,2正好是長度(等於它)。

對於數組或字符串,指數在範圍內如果0 <= low <= high <= len(a),否則它們是超出範圍。

由於正在切片一個string,索引在範圍,如果:

0 <= low <= high <= len(a) 

該表達式:

"hi"[2:] 

由於上界缺失,默認爲長度,這是2,所以它等同於:

"hi"[2:2] 

這是完全有效的規範,它會導致一個空的string。如果將其更改爲"hi"[3:],那麼它將超出範圍並導致編譯時錯誤(因爲可以在編譯時檢查常量string)。

推理是上限是排他性的,例如, a[0:0]有效並且將是0長度,a[0:1]將有效的長度爲1,a[0:len(a)],長度將與a相同。

在切片的情況下,下限甚至可以大於切片長度(但不得超過切片容量)。有關更多詳細信息,請參閱Slicing: Out of bounds error in Go