一、數組
golang的數組、切片,和py的列表相似,但是他們要求其中的元素必須是同一種數據類型。他們都可以通過索引下標訪問和修改。
golang數組和切片的區別:
golang數組,長度固定。切片,長度及容量自動擴容。
golang數組,是值類型數據。切片,是引用類型數據。
golang數組,不需要使用make初始化。切片,可以使用make初始化,也可以不使用make初始化,直接使用。
值類型:基本數據類型int, float,bool, string以及數組和struct
值類型:變量直接存儲值,內容通常在棧中分配
var i = 5 i -----> 5
引用類型:指針,切片,map,chan等都是引用類型
引用類型:變量存儲的是一個內存地址,這個內存地址存儲最終的值,內容通常在堆上分配,通過GC回收
ref r ------> 內存地址 -----> 值
二、數組定義
1.var聲明數組
1.var聲明數組 var 變量名稱 [數組長度]數據類型 var balance1 [10] float32
2.var聲明數組,並初始化
var 變量名稱 = [數組長度]數據類型{} var balance2 = [10] float32{}
3.var聲明數組,並初始化,不確定長度 var balance3 = [...] float32{1.1}
2.推導式聲明數組
1.推導式聲明數組,並初始化 balance4 := [10] float32{} balance5 := [10] float32{1.1}
2.推導式聲明數組,並初始化,不確定長度 balance5 := [...] float32{1.1}
三、遍歷
1.方式1:
arr := [4]string{"a","ab","abc"} for i:=0; i<len(arr); i++ { fmt.Println(i, arr[i]) }
2.方式2:
arr := [4]string{"a","ab","abc"} for index, value := range arr { fmt.Println(index, value) }
3.驗證數組式值類型
arr1 := [3]int{1,2,3} arr2 := arr1 arr2[0] = 100 fmt.Println(arr1) //[1 2 3] fmt.Println(arr2) //[100 2 3]
4.驗證切片式引用類型
a1 := []int{1,2,3} a2 := a1 a2[0] = 100 fmt.Println(a1) //[100 2 3] fmt.Println(a2) //[100 2 3]
四、二維數組
a := [3][4]int{ {0, 1, 2, 3} , /* 第一行索引為 0 */ {4, 5, 6, 7} , /* 第二行索引為 1 */ {8, 9, 10, 11}, /* 第三行索引為 2 */ } // 注意:以上代碼中倒數第二行的 } 必須要有逗號,因為最后一行的 } 不能單獨一行,也可以寫成這樣: a := [3][4]int{ {0, 1, 2, 3} , /* 第一行索引為 0 */ {4, 5, 6, 7} , /* 第二行索引為 1 */ {8, 9, 10, 11}} /* 第三行索引為 2 */ // 創建二維數組 sites := [2][2]string{} // 向二維數組添加元素 sites[0][0] = "Google" sites[0][1] = "Runoob" sites[1][0] = "Taobao" sites[1][1] = "Weibo" // 顯示結果 fmt.Println(sites)