go学习之切片

  切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装
  切片是一个引用类型,它的内部结构包含地址、长度和容量

 

切片定义

var name []T

例如:
var a []string              //声明一个字符串切片 ,此时未分配内存空间,==nil
var b = []int{1,2,3} //声明一个int切片并初始化

注意:
切片是引用类型,不支持直接比较,只能和nil比较


求切片长度:len()
求切片容量:cap() //切片容量是指底层数组的容量
切片底层是一个数组,我们可以基于数组切片得到切片
切片是引用类型,都指向了底层的一个数组

例如:
a := [5]int{1, 2, 3, 4, 5}
s := a[:3]
make()函数构造切片

使用方法:
make([]T, size, cap)
说明:
T:切片的元素类型
size:切片中元素的数量
cap:切片的容量

例如:
a := make([]int, 2, 10)
判断一个切片是否是空的,要是用len(s) == 0来判断,不应该使用s == nil来判断。

var s1 []int  //这样直接定义的切片,并未分配内存空间,是nil
切片赋值拷贝和循环

由于切片底层都指向了一个数组,所以赋值后,修改其中一个另一个值也改变
a1 := make([]int, 3) //[0 0 0]
a2 := a1      //a1和a1都指向底层同一个数组       
a2[0] = 100


切片的遍历方式和数组是一致的,支持索引遍历和for range遍历

 

切片添加元素append()

append可以一次加一个元素,也可以加多个元素,也可以加另一个切片钟元素(后面加…)

var s []int
s2 := []int{5, 6, 7}
s = append(s, 1)
s = append(s, s2...)
    
注意:
1、通过var声明的零值切片可以在append()函数直接使用,无需初始化
2、append追加元素,原来底层数组放不下时,go底层会把底层数组换一个,切片就会自动按照一定的策略进行“扩容”
copy()函数复制切片

copy()函数可以迅速地将一个切片的数据复制到另外一个切片空间中

copy(destSlice, srcSlice []T)
例如:
copy(c, a)     //使用copy()函数将切片a中的元素复制到切片c,修改c中数据不会影响a中的
go语言中并没有删除切片元素的专用方法,我们可以使用切片和append方式实现删除

例如:
要从切片a中删除索引为index的元素,操作方法是a = append(a[:index], a[index+1:]...)

 

posted @ 2021-08-04 17:22  泉love水  阅读(59)  评论(0编辑  收藏  举报