Go语言数组的内部实现和基础功能

发布时间:2020-06-19编辑:lianpenglin阅读(1395)

    数组的内部实现和基础功能

    内部实现

    在go语言里,数组是一个长度固定的数据类型,用于存储一段具有相同的类型的元素的连续块。数组存储的类型可以是内置类型,如整型或者字符串,也可以是某种结构类型。

    01234

    0

    整数

    20

    整数

    30

    整数

    40

    整数

    50

    整数

    在上表中可以看到数组的表示。灰色格子代表数组里的元素,每个元素都紧邻另一个元素。每个元素包含相同的类型,这个例子里是整数,并且每个元素可以用一个唯一的索引(也称下标或标号)来访问。

    数组是一种费用有用的数据结构,因为其占用的内存是连续分配的。由于内存连续,cpu能把正在使用的数据缓存更久的时间。而且内存联系很容易计算索引,可以快速迭代素组里的所有元素。素组的类型信息可以提供每次访问一个元素时需要在内存中移动的距离。既然数组的每个元素类型相同,又是连续分配,就可以以固定速度索引数组中的任意数据,速度非常快。

    声明和初始化

    声明数组时需要指定内部存储的数据的类型,以及需要存储的元素的数量,这个数量也成为数组的长度,如下所示

    //声明一个包含5个元素的整形数组
        var array [5]int

    一旦声明,数组里存储的数据类型和数组长度就都不能该表了。如果需要存储更多的元素,就需要先创建一个更长的数组,再把原来数组里的值复制到新数组里。

    在Go语言中声明变量时,总会使用对应类型的零值来对变量进行初始化。数组也不例外,当数组初始化时,素组内每个元素都初始化为对应类型的零值。在下表中,可以看到整形素组里的每个元素都初始化为0,也是整形的零值。

    【0】【1】【2】【3】【4】

    0

    整数

    0

    整数

    0

    整数

    0

    整数

    0

    整数

    一种快速创建数组并初始化的方式是使用数组字面量。数组字面量允许声明数组里元素的数量同时指定每个元素的值,如下代码所示:

    //声明一个包含5个元素的整形数组
        //用具体指初始化每个元素
        array := [5]int{10,20,30,40,50}

    如果使用...代替数组的长度,Go语言会根据初始化时数组元素的数量来确定该数组的长度,如下代码所示:

    //声明一个包含5个元素的整形数组
        //用具体指初始化每个元素
        //容量由初始化值的数量决定
        array := [...]int{10,20,30,40,50}

    如果知道数组的长度而是准备给每个值都指定具体值,可以使用如下代码所示的这种语法

    //声明一个包含5个元素的整形数组
        //用具体指初始化索引为1和2的元素
        //其余元素保持0值
        array := [5]int{1:10,2:20}


标签golang

如果对你有用打赏一下吧!