數組
數組是具有相同唯一類型的一組已編號且長度固定的數據項序列,這種類型可以是任意的原始類型例如整形、字符串或者自定義類型。
數組的長度必須是常量,並且長度是數組類型的一部分。一旦定義,長度不能變。數組可以通過下標進行訪問,下標是從0開始,最后一個元素下標是:len-1,訪問越界(下標在合法范圍之外),則觸發訪問越界,會panic。
數組是值類型,賦值和傳參會復制整個數組。因此改變副本的值,不會改變本身的值。
數組聲明
var 數組變量名 [元素數量]元素類型
var a [3]int //聲明一個長度為3的整形數組
var city = [...]string{"北京", "上海", "深圳"} //聲明一個可變長度的字符串類型數組並且初始化
數組定義必須指定長度。
讓編譯器根據初始值的個數自行推斷數組的長度...
。
切片
切片(Slice)是一個擁有相同類型元素的可變長度的序列。它是基於數組類型做的一層封裝。
切片是一個引用類型,它的內部結構包含地址、長度和容量。
切片聲明
var 變量名稱[]元素類型
var a []string //聲明一個字符串切片
var b = []int{} //聲明一個整型切片並初始化
var c = []bool{false, true} //聲明一個布爾切片並初始化
使用make()函數構造切片
make([]元素類型, 切片中元素的數量, 切片的容量)
s := make([]int, 2, 10)
切片不需要指定長度。
切片之間是不能比較,只能和nil比較!
map
map是一種無序的基於key-value的數據結構,Go語言中的map是引用類型,必須初始化才能使用。map是無序的。
map聲明
map[鍵類型]值類型
make(map[KeyType]ValueType, [cap])
其中cap表示map的容量,該參數不是必須的
三種聲明方式
//第一種聲明
var test1 map[string]string
//在使用map前,需要先make,make的作用就是給map分配數據空間
test1 = make(map[string]string, 10)
test1["one"] = "php"
//第二種聲明
test2 := make(map[string]string)
test1["one"] = "php"
//第三種聲明
test3 := map[string]string{
"one" : "php",
}