去切片长度为容量-1,为什么?

去切片长度为容量-1,为什么?,第1张

切片长度为容量-1,为什么?

这行:

fruits := [4]string{"apple", "orange", "mango"}

创建一个 数组 ,而不是一个切片。即使您仅提供了3个元素,它也有4个元素。输出

fmt.Printf("%q", fruits)

["apple" "orange" "mango" ""]

切片:

tasty_fruits := fruits[1:3]

结果是:

["orange" "mango"]

长度:明显2.容量?

容量 是…的片的长度和超过所述切片中的[基本]阵列的长度的总和。

由于

"mango"
底层数组中仅包含一个元素,因此容量为
2 + 1 = 3

索引切片(

tasty_fruits
):规范:索引表达式:

对于

a
切片类型
S
a[x]

  • 如果
    x
    在运行时超出范围,则会发生运行时恐慌

x
如果为
0 <= x < len(a)
,则在范围内,否则为超出范围。由于
len(tasty_fruits)
is
2
,索引
2
超出范围,因此发生运行时恐慌。

即使容量允许,也无法索引超出片段长度的片段。如果您对切片进行切片,则只能达到超出长度的元素,例如:

tasty_fruits2 := tasty_fruits[:3]tasty_fruits2[2] = "nectarine" // This is ok, len(tasty_fruits2) = 3fmt.Printf("%q", tasty_fruits2)

输出:

["orange" "mango" "nectarine"]


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5082589.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存