slice-切片
- 基本介绍
- 基本格式
- 创建方法
- 截取
- append
- copy
基本介绍
基本格式
slice :=[low:hight:max]low:起始位置hight:结束位置max:最大位置容量:cap(slice) = max - low长度:len(slice) = hight - low
创建方法
slice := [len]类型{初始化值} //len不填写 默认取初始化长度eg:slice := [5]int{1,2,3,4,5} // 长度为5,容量为5slice := make([]类型,len,cap) //len-长度 cap-容量eg: slice := make([]int,5,6) //长度为5 容量为6,int默认填充0slice := male([]int,5) //长度为5,容量5(默认取长度值)
截取
slice := []int{1,2,3,4,5,6} //长度6 容量6s := slice[1:3:4] //1-从原切片下标为1的元素起 3-截取到下标为3的元素前一个 4-截取后s的容量fmt.Println(\"cap:\", cap(s)) // 打印值为 cap:3fmt.Println(\"len:\", len(s)) // 打印值为 len:2fmt.Println(\"s:\", s) // 打印值为 s:[2,3]s := slice[1:3]fmt.Println(\"cap:\", cap(s)) // 打印值为 cap:5 原数组的容量- low(1)fmt.Println(\"len:\", len(s)) // 打印值为 len:2fmt.Println(\"s:\", s) // 打印值为 s:[2,3]s := slice[:3] // 等价于 s := slice[0:3]fmt.Println(\"cap:\", cap(s)) // 打印值为 cap:6 原数组的容量- low(0)fmt.Println(\"len:\", len(s)) // 打印值为 len:3fmt.Println(\"s:\", s) // 打印值为 s:[1,2,3]
}
append
append 在切片后面增加元素
slice := []int{1,2,3,4,5,6} //长度6 容量6append(slice,7)fmt.Println(\"slice:\", slice) // 输出:[1,2,3,4,5,6,7]fmt.Println(\"len:\", len(slice)) // 输出:len:7fmt.Println(\"cap:\", cap(slice)) // 输出:len:12 容量不够时,以两倍原容量扩容append扩容机制:1、cap(slice)容量小于1024,乘以2扩容;cap(slice)容量 大于1024,增长乘以1.25扩容。2、计算扩容时,计算后容量小于原容量,则不进行扩容,切片首地址保持不变,计算后容量超过原容量,开辟新内存,拷贝原切片数据到新的内存块,原切片数据不变。
copy
copy(目标切片,源切片)slice := []int{1,2,3,4,5,6} //长度6 容量6s := make([]int,3)copy(s, slice)fmt.Println(\"s:\", s) //输出:[1,2,3]s := make([]int,6)copy(s, slice)fmt.Println(\"s:\", s) //输出:[1,2,3,4,5,6]s := make([]int,7)copy(s, slice)fmt.Println(\"s:\", s) //输出:[1,2,3,4,5,6,0] 最后空一位初始化值 0