GO语言学习系列六——GO的数组 array与切片 slice

数组(array)

在GO语言中,数组是用于存储相同数据类型的集合,数组长度必须是一个常量表达式,且是一个非负数GO语言中的数组是一种值类型,下文会介绍

数组定义的格式

输出为:

在GO语言中,初始化数组时,给定了数组长度,但没给定数组下标的值, 类型默认值为 , 类型默认为 空值,这是常用的两种类型

数组的赋值操作

有必要说明一下:数组在初始中给定了数组的长度,用 可以得到数组的长度,如果赋值时操出数组的最大长度,在编译的时候将会报错

先来个练习加深下前面所说的影响,将一个int型数组的值全部乘以2

输出为

数组的值类型

在GO语言中,数组的存储是一种值的类型,不像C等其它语言是指向首元素的指针,所以在创建数组也可以通过 来创建一个指针数组例:

输出分别为

符号熟悉么,没错,他表明这是一个指针数组,在函数中传递时,不用将数组的值进行复制一遍

多维数组

在某种程度上面来说,多维数组其实就是将多个一维数组进行嵌套一种表达方式,例如: 输出为 如果尝过其它语言编程的人一看就明白是怎么回事了

做个小题目:定义一个空的二维数组,将二维数组的值与索引一至

输出

数组的处理还有很多别的形式,等着你在实际工作中的发现与总结

切片(slice)

切片是对数组一个连续片段的引用,它是一个引用类型,存储的是指针,所以在性能上比值数组更快,使用方法和数组基本类似,也可以通过索引进行访问, 获得切片的长度, 获得切片最大的长度

切片声明格式

和声明数组非常相似,切片的声明是不需要指定数组长度,因为切片的长度是可变的(等会介绍)

一个切片在初始化之前默认为 ,长度为 一个相对完整的例子:

输出

上面的例子介绍了切片的初始化和获得数组中某一个片段的值,当然还有一些其他用法比如 , 等等,切片的灵活性非常高,就看你需要什么数组的哪个片段

注意 绝对不要用指针指向 slice。切片本身已经是一个引用类型,所以它本身就是一个指针!!

用make()创建一个切片

当相关的数组还没有创建好的时候,我们可以用 函数来创建一个切片,同时创建好相关联的数组

通过一个例子来说明make的使用

输出

make()函数在初始化切片是经常被使用的方式,当然你要用简单的 也可以,看习惯

切片的复制与追加

通过 与 来进行操作一个例子:

输出:

复制与增加需要注意的:

是将后面的元素或切片追加到前面

必须是相同的元素类型

当容量不足时,会生成一个新的地址来保证新增加的元素

如果上面的条件都满足,一般来说都会返回成功,除非内存耗尽了(无解)

小记:

当然切片还有更多的细节及处理方式,完整版最好还是去看官方提供的文档,本篇重点介绍了GO的数组与切片,下一篇将介绍GO的map类型

如果觉得文章能够对您有所帮助,可以关注我,你的支持会鼓励我不断分享更多更好的优质文章。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180118A0ZU2500?refer=cp_1026

扫码关注云+社区