常见的数据结构有数组、切片、Map、结构体。

一、数组

    数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型。例如:整形、字符串或者自定义类型。   

    声明数组需要指定元素类型及元素个数,语法格式:var variable_name [size] variable_type

二、切片

    切片是对数组的抽象。Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。

    切片声明不需要指定长度,格式为:var identifier []type  

        或使用make()函数来创建切片:var slice1 []type = make([]type, len)

        也可以简写为 slice1 := make([]type, len)

        也可以指定容量,其中capacity为可选参数:make([]T, length, capacity)    这里 len 是数组的长度并且也是切片的初始长度。

    len() 和 cap() 函数

        切片是可索引的,并且可以由 len() 方法获取长度。

        切片提供了计算容量的方法 cap() 可以测量切片最长可以达到多少。

        一个切片在未初始化之前默认为 nil,长度为 0

三、结构体

    结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。

    结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体有中有一个或多个成员。type 语句设定了结构体的名称。结构体的格式如下:

            type struct_variable_type struct {

                member definition;

                member definition;

                ...

                member definition;

            }     

四、Map类型

    Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。

    Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。

    可以使用内建函数 make 也可以使用 map 关键字来定义 Map:

        /* 声明变量,默认 map 是 nil */

        var map_variable map[key_data_type]value_data_type

        /* 使用 make 函数 */

        map_variable := make(map[key_data_type]value_data_type)

        如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对

03-15 04:17