一、数组
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)