切片对数组进行包装,为数据序列提供了更通用、更强大和更方便的接口。Go中的大多数数组编程都是用切片而不是简单的数组来完成的
slice(切片)代表变长的序列,序列中每个元素都有相同的类型。一个slice类型一般写作[]T,其中T代表slice中元素的类型。
1.slice创建
- 直接通过初始化参数创建
slice0 := []int{1,3,7,5,2,3,4}
fmt.Println(slice0,len(slice0),cap(slice0))
// [1 3 7 5 2 3 4] 7 7
- 使用内置函数make创建。使用默认值进行初始化
slice1 := make([]int,5,10)
fmt.Println(slice1,len(slice1),cap(slice1))
// [0 0 0 0 0] 5 10
- 从指定下标创建。没指定的将使用默认值进行初始化,比如int类型是0值,string类型是空串。
slice2 := [...]int{1:1,12:12}
fmt.Println(slice2)
// [0 1 0 0 0 0 0 0 0 0 0 0 12]
fmt.Println(slice2[0],len(slice2),cap(slice2))
// 0 13 13
2.slice的操作
- 下标索引操作
slice3 := []int{1,3,7,5,2,3,4}
fmt.Println(slice3[1])
// 3
fmt.Println(slice3[10])
// 运行时报panic: runtime error: index out of range [10] with length 7
- for循环操作
slice3 := []int{1,3,7,5,2,3,4}
for _,val := range slice3{
value := val // 复制
fmt.Println(value)
}
- 切片操作。跟python里面切片一样
slice3 := []int{1,3,7,5,2,3,4}
fmt.Println(slice3[2:4])
// [7 5]
- 两个slice不能直接使用 == 进行比较。slice唯一合法的比较操作是和nil比较
slice4 := []int{1,3,7,5,2,3,4}
slice5 := slice4[2:4]
fmt.Println(slice4 == slice5) // 提示:Invalid operation: slice4 == slice5 (operator == is not defined on []int)
fmt.Println(slice4 != nil) // true
- 内置函数的len和cap函数分别返回slice的长度和容量

最低0.47元/天 解锁文章
2233





