赞
踩
本文始发于个人公众号:TechFlow,原创不易,求个关注
今天是golang专题的第五篇,这一篇我们将会了解golang中的数组和切片的使用。
golang当中数组和C++中的定义类似,除了变量类型写在后面。
比如我们要声明一个长度为10的int型的数组,会写成这样:
var a [10]int
数组的长度定义了之后不能改变,这点和C++以及Java是一样的。但是在我们日常使用的过程当中,除非我们非常确定数组长度不会发生变化,否则我们一般不会使用数组,而是使用切片(slice)。
切片有些像是数组的引用,它的大小可以是动态的,因此更加灵活。所以在我们日常的使用当中,比数组应用更广。
切片的声明源于数组,和Python中的list切片类似,我们通过指定左右区间的范围来声明一个切片。这里的范围和Python一样,左闭右开。我们来看个例子:
var a [10]int
var s []int = a[0:4]
这是标准的声明写法,我们也可以不用var来声明,而是直接利用数组给切片赋值,比如上面的语句可以写成这样:
s := a[:4]
在Python当中,当我们使用切片的时候,解释器会为我们将切片对应的数据复制一份。所以切片之后和之前的结果是不同的,但是golang当中则不同。切片和数据对应的是同一份数据,切片只是数组的一个引用,如果原数组的数据发生变化,那么会连带着切片中的数据一起变化。
还是刚才那个例子:
var a [10]int
var s []int = a[0:4]
fmt.Println(s)
这样我们输出得到的结果是[0 0 0 0],因为数组初始化默认值为0。而假如我们修改一个a中的元素,我们再来打印s,得到的结果就不同了:
var a [10]int
var s []int = a[0:4]
a[0] = 4
fmt
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。