AI智能
改变未来

go基础之slice(切片)

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
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » go基础之slice(切片)