Go 切片(Slice)
Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片(“动态数组”),与数组相比切片的长度是不固定的,可以追加元素,容量(cap)不够时会自动扩容
切片为引用类型,从数组中得到的切片修改元素值时,原数组也会发生变化,修改原数组时,切片也会变化
创建切片的四种方法
- var
1 | var s []uint32 |
2.切片字面量,这样创建的切片长度和容量都等于初始元素个数
1 | s := []uint32{1, 2, 3} |
3.make
使用make创建,可以指定长度和容量。格式为make([]type, len[, cap])
,可以只指定长度,也可以长度容量同时指定
1 | s1 := make([]uint32) |
4,截取符,可以从现成的数组或切片创建
1 | var arr [10]uint32 |
二、添加元素
使用append()
函数向切片中添加元素,可以一次添加 0 个或多个元素,如果容量不够会自动扩容
1 | s := make([]uint32, 0, 4) |
使用copy()
将内容从一个数组切片复制到另一个数组切片。如果加入的两个数组切片不一样大,就会按其中较小的那个数组切片的元素个数进行复制
1 | slice1 := []int{1, 2, 3, 4, 5} |
三、删除元素
截取需要的那部分再赋值回去就是删除
PS:关于扩容的一个小问题
话说往切片增加元素时容量不够会自动扩容,那每次到底扩了多少呢?
还是有点复杂的,详情可以看这里
评论
GiscusTwikoo