常見的數據結構有數組、切片、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 不能用來存放鍵值對