Golang|学习教程(四)-数组和切片
本小节学习go语言的数组和切片,一门编程语言肯定少不了基本数据结构数组,go语言中还有另外的类型切片,和数组的区别是数组的大小是固定的,是不可改动的,而切片是可以动态扩展的。
数组
首先说一说数组,go语言中使用[n]T
来定义数组,例如var p [5]int
,这里我们定义了一个整数数组,数组大小是5。
数组如何初始化?go语言提供了以下方法:
|
|
获取数组的内部指,我们可以使用下标,下标从0开始计数,最大的下标len(数组)-1
,如果下标超过了最大值,则会发出下标越界的panic。
|
|
除了使用指定下标获取指定数值,我们还可以使用p[low:high]
的形式,获取范围内的数据,这里返回的就是一个切片了,后续介绍切片。需要注意的是,这种范围取值是左闭右开的,即包括左边值,但不包括右边值,此外如果low==high
则返回的就是空切片了。
|
|
数组的遍历可以使用for
循环基于下标的遍历,也可以配合range
来遍历。
|
|
学习了基础的一维数组,自然而然还需要知道多维数组,多维数组的定义和其他语言类似,通过多个[]
制定大小即可。
|
|
切片
切片是一种可以动态扩展的数组,它可以动态扩展,但也正因为可以动态扩展,也存在一些奇怪的特性需要注意。
首先来了解切片的定义,切片使用[]T
格式来定义,和数组定义的区别就是不需要指定大小。定了切片后我们学习如何初始化,方法有以下几种:
|
|
上面的例子可以看到,切片利用数组进行初始化,这里我们需要对切片的内部进行详细的了解,其实切片可以理解为数组的一种特殊引用,和c语言中字符串的定义类似,切片包含三个元素,即指向底层数组的指针,切片的大小以及切片的容量
了解切片的构造,我们可以知道,如果多个切片底层使用的是同一个数组,则数组有改动,对应的切片也都会变动。
|
|
切片是可以动态变动大小的,因此我们如何添加元素?这里使用append
函数。
|
|
从用例可以看出,append函数还可以一次性添加多元素,不过需要在后面通过...
符号来指定。
上面的例子还有一点需要注意,就是刚刚定义的切片是nil
,但我们可以直接使用append
函数新增元素。