Go语言中切片的索引语法

Jicheng's Blog / 2023-08-14 / 原文

以下是 Go 切片的更详细的索引和子切片操作:

基本的切片索引语法

切片索引的基本语法是 s[start:end:capacity],其中:

  • start:开始索引,包含此索引位置的元素。
  • end:结束索引,排除此索引位置的元素。
  • capacity:切片的最大容量。

1. 省略 capacity

最常见的用法是只指定 startend,这时 capacity 默认为原始切片的容量。

s := []int{1, 2, 3, 4, 5}
sub := s[1:4]
fmt.Println(sub)  // 输出:[2 3 4]

2. 省略 startend

  • 省略 start,它默认为 0:

    s := []int{1, 2, 3, 4, 5}
    fmt.Println(s[:3])  // 输出:[1 2 3]
    
  • 省略 end,它默认为切片的长度:

    s := []int{1, 2, 3, 4, 5}
    fmt.Println(s[2:])  // 输出:[3 4 5]
    

3. 指定 capacity

除了 startend,您还可以明确指定切片的 capacity

s := []int{1, 2, 3, 4, 5}
sub := s[1:4:5]
fmt.Println(sub)        // 输出:[2 3 4]
fmt.Println(cap(sub))   // 输出:4

在上面的例子中,sub 的长度是 4 - 1 = 3,容量是 5 - 1 = 4

指定 capacity 可以限制子切片的最大容量,这在某些情况下可以防止无意中修改原始切片中不应修改的部分。

总之,Go 切片的索引语法为您提供了强大的工具来选择和控制子切片的大小和容量,从而使您能够更灵活地处理数据。