Go 切片
Posted ycx95
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 切片相关的知识,希望对你有一定的参考价值。
切片是什么?一种数据结构,类似数组,围绕动态数组的概念而设计,可按需自动改变大小。
切片内部实现?切片基于数组实现,底层是数组(故底层的内存是连续分配,可根据索引获取数据,可迭代以及垃圾回收),自身非常小(切片对象只有3个字段数据结构即:指向底层数组的指针ptr、切片长度len、切片容量cap),可看作对底层数组的抽象。
切片如何声明?创建方式多样,比如make、或指定初始化值或基于现有切片(数组)创建
方法一简洁如make make([]T, length, capacity) ,比如 slice := make([]int,5) 指定切片长度为5, slice:=make([]int,5,10) 指定切片长度5,容量10(对应的是切片底层数组)
注:容量为10,但长度为5,故我们只能访问5个元素,剩下的5个元素需要切片扩充后才可访问。且容量>=长度。
方法二使用自变量:指定初始化值 slice := []int{1,2,3,4,5}
方法三基于现有切片(数组)创建, s := arr[startIndex:endIndex] //前闭后开 使用 [i:j] 操作符表示以i到j的左闭右开,类似Java的subString方法。
切片初始值?切片底层为数组,创建切片不指定字面值,默认为数组元素的零值。类似数组,初始化可以为:
//数组初始化 array := [5]int{4:1} slice := []int{4:1}
nil切片与空切片区别?长度、容量都为0.
nil切片(比如: var nilSlice []int )指向底层数组的指针为nil,nil切片表示不存在的切片。
空切片(比如: slice := []int{} )对应的指针是个地址,空切片表示一个空集合。
以上是关于Go 切片的主要内容,如果未能解决你的问题,请参考以下文章