一:初识
- 定义切片
var 切片名 [] type
切片不需要说明长度,或使用make()函数来创建切片
- make()
- 理解
- 每一个切片引用了一个底层数组,切片是引用类型
- 切片本身不存储任何数据,都是这个底层数组存储,所以修改切片也就是修改这个数组中的数据
- 当向切片中添加数据时,如果没有超过容量,直接添加,如果超过容量,自动扩容(成倍增长,开辟新的空间,指向新的空间地址 )
- 切片一旦扩容,就是重新指向一个新的底层数组
func make(t Type,size ...IntegerType) Type
- 第一个参数:类型
slice,map,chan
- 第二个参数:长度len
实际存储元素的数量
- 第三个参数:容量cap
最多能够存储的元素的数量
package main
import "fmt"
func main() {
//数组
arr := [4] int {1,2,3,4}
fmt.Println(arr)
//切片
s2 := [] int {5,6,7,8}
fmt.Println(s2)
fmt.Printf("arr数据类型是%T,s2数据类型是%T\n",arr,s2)
s3 := make([]int,3,8)
fmt.Println(s3)
fmt.Printf("s3容量:%d,长度:%d\n",cap(s3),len(s3))
s3[0] = 1
s3[1] = 2
s3[2] = 3
fmt.Println(s3)
//append
s4 := make([]int,0,5)
fmt.Println("s4",s4)
s4 = append(s4,1,2)
fmt.Println("s4",s4)
//把s3中的内容加到s4里
s4 = append(s4,s3...)
fmt.Println("把s3切片加到s4中:", s4)
}
//结果
[1 2 3 4]
[5 6 7 8]
arr数据类型是[4]int,s2数据类型是[]int
[0 0 0]
s3容量:8,长度:3
[1 2 3]
s4 []
s4 [1 2]
把s3切片加到s4中: [1 2 1 2 3]
二:在已有的数组上直接创建slice
import "fmt"
func main() {
a := [10] int {1,2,3,4,5,6,7,8,9,10}
s1 := a[:5] //1-5
s2 := a[3:8] //4-8
s3 := a[5:] // 6-10
s4 := a[:] //1-10
fmt.Println("a",a)
fmt.Println("s1",s1)
fmt.Println("s2",s2)
fmt.Println("s3",s3)
fmt.Println("s4",s4)
}
//结果
a [1 2 3 4 5 6 7 8 9 10]
s1 [1 2 3 4 5]
s2 [4 5 6 7 8]
s3 [6 7 8 9 10]
s4 [1 2 3 4 5 6 7 8 9 10]

image.png
网友评论