Golang中的切片初始化

切片的初始化方法很多,可以直接初始化,也可以使用数组初始化等。

切片如何切分

要注意,指定下标切分的时候是,左包含,右不包含的

只有[:]则是所有

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

import "fmt"

func slice1() {
var s1 = []int{1, 2, 3, 4, 5, 6}
s2 := s1[0:3] // [)
fmt.Printf("s2: %v\n", s2)
s3 := s1[3:]
fmt.Printf("s3: %v\n", s3)
s4 := s1[3:5]
fmt.Printf("s4: %v\n", s4)
s5 := s1[:]
fmt.Printf("s5: %v\n", s5)
}
func main() {
slice1()
}

运行结果

1
2
3
4
s2: [1 2 3]
s3: [4 5 6]
s4: [4 5]
s5: [1 2 3 4 5 6]

直接初始化

1
2
3
4
5
6
7
8
package main

import "fmt"

func main() {
s := []int{1, 2, 3}
fmt.Printf("s: %v\n", s)
}

运行结果

1
s: [1 2 3]

使用数组初始化

1
2
3
4
5
6
7
8
9
package main

import "fmt"

func main() {
arr := [...]int{1, 2, 3}
s1 := arr[:]
fmt.Printf("s1: %v\n", s1)
}

运行结果

1
s1: [1 2 3]

使用数组的部分元素初始化(切片表达式)

切片的底层就是一个数组,所以我们可以基于数组通过切片表达式得到切片,切片表达式中的low和high表示一个索引范围(左包含,右不包含),得到的切片长度=high-low,容量等于得到的切片的底层数组的容量。

1
2
3
4
5
6
7
8
9
10
11
12
13
package main

import "fmt"

func main() {
arr := [...]int{1, 2, 3, 4, 5, 6}
s1 := arr[2:5]
fmt.Printf("s1: %v\n", s1)
s2 := arr[2:]
fmt.Printf("s2: %v\n", s2)
s3 := arr[:3]
fmt.Printf("s3: %v\n", s3)
}

运行结果

1
2
3
s1: [3 4 5]
s2: [3 4 5 6]
s3: [1 2 3]