米琪卡哇伊
切片的容量总是至少与切片的长度相同。未指定时,默认值始终与长度相同。切片长度的定义是设置到切片中的元素个数。切片容量的定义是切片可以提供的所有块,这些块对调用者是隐藏的,默认值为空(0 表示 int,“”表示字符串)。当您像这样调用某个索引a[x]的值时,它将在 indexx的范围内获取值length。但是,当您像这样重新切片切片时a[x:y],它将在容量x范围内的索引处获得切片,直到 y(最大值必须与容量相同)。因此,作为切片的调用者,您可以在整个切片结构中获取切片的隐藏元素,默认值为空。如果您没有像上面那样指定重新切片(y)的结束 -> a[2:],那么重新切片的默认结束将设置为lenght,这使您的调用a[2:]暗示a[2:1]自slice 的长度为 1。想想看,调用 的子切片a[2:1],会发生什么?正如错误消息告诉我们的那样:恐慌:运行时错误:切片超出范围 [2:1]因为您正在从甚至不在容量范围内的索引中调用子切片(它本身的切片的整个结构)。即使 2 在 slice 的容量范围内,您的调用也会重叠,因为起始索引大于容量。总结一下:如果你像这样调用 sub-slice -> a[x:] 那么 x 必须在长度范围内(包括)如果你像这样调用 sub-slice -> a[:y] 那么 y 必须在容量范围内(包括)如果你像这样调用 sub-slice -> a[x:y] 那么 x 和 y 必须在容量(包括)和 x<=y 的范围内。