赞
踩
切片 是Go中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合。切片是围绕动态数组的概念构建的,可以按需自动增长和缩小。它非常灵活,支持自动扩容。切片的底层一段连续的内存。
切片是一个有三个字段的数据结构,分别为地址
、长度
和容量
,它对底层的数组(内部是通过数组保存数据的)进行了抽象,并提供相关的操作方法。
地址:指向底层数组的指针。
长度:切片可以访问的元素的个数,使用内置函数len(切片名)
可以获得。
容量:从切片地址开始到底层数组结尾的长度,使用内置函数cap(切片名)
可以获得。
在Golang中可以通过多种方式创建和初始化切片。可以根据切片所需的容量来决定如何创建切片。
切片的声明格式如下:
var 切片名 []元素类型
例如,声明一个地址为nil的整型切片:
var myNum []int // 例:声明一个地址为nil的整型切片
单纯声明后的切片并没有分配内存空间,因此地址指向nil,可以称之为nil切片。nil切片的长度和容量都为0,数据结构状态如下:
在Golang中,nil切片很常见,可以使用很多标准库和内置函数。在需要描述一个不存在的切片时,nil切片会很好用。比如,函数要求返回一个切片但是发生异常的时候。
使用Golang内置的make()函数,动态创建一个切片,格式如下:
make([]类型, 长度, 容量)
a := make([]int, 3, 5) // 定义一个长度为3,容量为5,元素为int类型的切片
fmt.Println(a) // [0 0 0] 切片可访问的元素数为3
fmt.Println(len(a)) // 3
fmt.Println(cap(a)) // 5
fmt.Printf("%#v \n", a) // []int{0, 0, 0}
示例代码中a
的内部存储空间已经分配了5个,但实际只是用了3个。容量并不会影响当前元素的个数。
当要创建的切片长度=容量
时,可以使用以下格式进行创建:
make([]类型, 长度) // 创建长度=容量的切片
b := make([]int, 3) // 定义一个长度为3,容量为3,元素为int类型的切片
fmt.Println(a) // [0 0 0]
fmt.Println(len(a)) // 3
fmt.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。