在 Go 中,为什么这段代码可以工作:
package main
import (
"fmt"
)
func main() {
a := []int{1}
a = a[1:]
fmt.Println(len(a))
}
Run Code Online (Sandbox Code Playgroud)
但这并没有:
package main
import (
"fmt"
)
func main() {
a := []int{1}
a = a[2:]
fmt.Println(len(a))
}
Run Code Online (Sandbox Code Playgroud)
我听说过切片容量,有人可以详细说明吗?
Go 规范包含您两个问题的答案:
切片表达式
切片表达式从字符串、数组、数组指针或切片构造子字符串或切片。有两种变体:指定下限和上限的简单形式,以及还指定容量上限的完整形式。
简单的切片表达式
[片段]
对于数组或字符串,如果 则索引在范围内
0 <= low <= high <= len(a),否则索引超出范围。
由于len(a)is 1,索引 1 在范围内,但索引 2 超出范围。
完整切片表达式
对于数组、指向数组的指针或切片
a(但不是字符串),主表达式Run Code Online (Sandbox Code Playgroud)a[low : high : max]构造一个与简单切片表达式 相同类型、相同长度和元素的切片
a[low : high]。此外,它还通过将结果设置为 来控制生成的切片的容量max - low。仅第一个索引可以省略;默认为 0....
阅读整个规范。它可能会有点慢,但不会那么长。没有必要记住所有内容,但是在读完整个内容之后,您应该能够记住您在某处读过该内容,然后返回并找到您要查找的内容。
| 归档时间: |
|
| 查看次数: |
20652 次 |
| 最近记录: |