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 切片的主要内容,如果未能解决你的问题,请参考以下文章

Go语言切片

Go切片实现

从零开始学Go之容器:切片

《Go题库·1》Golang里的数组和切片有了解过吗?

Go 语言泛型编程之切片

Go笔记:切片