常见的数据结构有数组、切片、Map、结构体。数组
1、数组数据结构
数组是具备相同惟一类型的一组已编号且长度固定的数据项序列,这种类型能够是任意的原始类型。例如:整形、字符串或者自定义类型。 ide
声明数组须要指定元素类型及元素个数,语法格式:var variable_name [size] variable_type函数
2、切片索引
切片是对数组的抽象。Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,能够追加元素,在追加时可能使切片的容量增大。ci
切片声明不须要指定长度,格式为:var identifier []type 字符串
或使用make()函数来建立切片:var slice1 []type = make([]type, len)hash
也能够简写为 slice1 := make([]type, len)it
也能够指定容量,其中capacity为可选参数:make([]T, length, capacity) 这里 len 是数组的长度而且也是切片的初始长度。io
len() 和 cap() 函数
切片是可索引的,而且能够由 len() 方法获取长度。
切片提供了计算容量的方法 cap() 能够测量切片最长能够达到多少。
一个切片在未初始化以前默认为 nil,长度为 0
3、结构体
结构体是由一系列具备相同类型或不一样类型的数据构成的数据集合。数组能够存储同一类型的数据,但在结构体中咱们能够为不一样项定义不一样的数据类型。
结构体定义须要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体有中有一个或多个成员。type 语句设定告终构体的名称。结构体的格式以下:
type struct_variable_type struct {
member definition;
member definition;
...
member definition;
}
4、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 不能用来存放键值对