当前位置:   article > 正文

手把手golang教程——数组与切片_golang数组和切片

golang数组和切片

本文始发于个人公众号:TechFlow,原创不易,求个关注


今天是golang专题的第五篇,这一篇我们将会了解golang中的数组和切片的使用。


数组与切片


golang当中数组和C++中的定义类似,除了变量类型写在后面。

比如我们要声明一个长度为10的int型的数组,会写成这样:

var a [10]int
  • 1

数组的长度定义了之后不能改变,这点和C++以及Java是一样的。但是在我们日常使用的过程当中,除非我们非常确定数组长度不会发生变化,否则我们一般不会使用数组,而是使用切片(slice)。

切片有些像是数组的引用,它的大小可以是动态的,因此更加灵活。所以在我们日常的使用当中,比数组应用更广。

切片的声明源于数组,和Python中的list切片类似,我们通过指定左右区间的范围来声明一个切片。这里的范围和Python一样,左闭右开。我们来看个例子:

var a [10]int
var s []int = a[0:4]
  • 1
  • 2

这是标准的声明写法,我们也可以不用var来声明,而是直接利用数组给切片赋值,比如上面的语句可以写成这样:

s := a[:4]
  • 1

在Python当中,当我们使用切片的时候,解释器会为我们将切片对应的数据复制一份。所以切片之后和之前的结果是不同的,但是golang当中则不同。切片和数据对应的是同一份数据,切片只是数组的一个引用,如果原数组的数据发生变化,那么会连带着切片中的数据一起变化。

还是刚才那个例子:

var a [10]int
var s []int = a[0:4]
fmt.Println(s)
  • 1
  • 2
  • 3

这样我们输出得到的结果是[0 0 0 0],因为数组初始化默认值为0。而假如我们修改一个a中的元素,我们再来打印s,得到的结果就不同了:

var a [10]int
var s []int = a[0:4]
a[0] = 4
fmt
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/206320
推荐阅读
相关标签
  

闽ICP备14008679号