猿问

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

在 shell 中具有特殊含义的字符需要被引用或转义。您可以在 shell 的手册页中找到完整列表(在 中的“引用”下man 1 bash)。


在这种情况下,您可以引用或转义 baskslash


-string=hello\\Bob

// or

-string='hello\Bob'


心有法竹
浏览 199回答 3
3回答

忽然笑

这一行:fruits&nbsp;:=&nbsp;[4]string{"apple",&nbsp;"orange",&nbsp;"mango"}创建一个数组,而不是一个切片。即使您只提供了 3 个元素,它也有 4 个元素。输出fmt.Printf("%q", fruits):["apple"&nbsp;"orange"&nbsp;"mango"&nbsp;""]切片:tasty_fruits&nbsp;:=&nbsp;fruits[1:3]结果是:["orange"&nbsp;"mango"]长度:显然 2.容量?的容量是...的片的长度和超过所述切片中的[基本]阵列的长度的总和。由于"mango"底层数组中有一个元素,因此容量为2 + 1 = 3。索引切片 (&nbsp;tasty_fruits): 规范:索引表达式:对于a切片类型S:a[x]如果x在运行时超出范围,则会发生运行时恐慌x如果在范围内0 <= x < len(a),否则超出范围。由于len(tasty_fruits)is&nbsp;2,索引2超出范围,因此发生运行时恐慌。您不能索引超出切片长度的切片,即使容量允许。如果您重新切片,则只能到达超出长度的元素,例如:tasty_fruits2&nbsp;:=&nbsp;tasty_fruits[:3] tasty_fruits2[2]&nbsp;=&nbsp;"nectarine"&nbsp;//&nbsp;This&nbsp;is&nbsp;ok,&nbsp;len(tasty_fruits2)&nbsp;=&nbsp;3 fmt.Printf("%q",&nbsp;tasty_fruits2)输出:["orange"&nbsp;"mango"&nbsp;"nectarine"]

慕丝7291255

切片的容量取决于底层数组的大小。因此,如果您更改fruits为具有差异大小,例如:fruits&nbsp;:=&nbsp;[5]string{"apple",&nbsp;"orange",&nbsp;"mango"}cap(tasty_fruits) 将返回 4 而不是 3。所以容量意味着切片可以扩展到的最大大小。“切片不能超过其容量。尝试这样做会导致运行时恐慌”。切片本质上是c带有边界检查的指针。切片的长度是它将在运行时检查的边界。因此,如果您尝试访问超出长度的任何内容,也会导致运行时恐慌。是的,长度 <= 容量总是正确的。
随时随地看视频慕课网APP

相关分类

Go
我要回答