💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] 数组是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),这种类型可以是意的原始类型,比如int、string等,也可以是用户自定义的类型。一个数组包含的元素个数被称为数组的长度。在Golang中数组是一个长度固定的数据类型,数组的长度是类型的一部分,也就是说 [5]int 和 [10]int 是两个不同的类型。Golang中数组的另一个特点是占用内存的连续性,也就是说数组中的元素是被分配到连续的内存地址中的,因而索引数组元素的速度非常快。数组是 **值类型** >[info] 值类型有两个点: > - 有默认值。例如整型是0,浮点型是0,布尔值是false,字符串是'' > - 变量赋值的时候,可以理解为 `ctrl + c` 和 `ctrl + v` 的场景。最终两个变量的值是没有关系的。修改一个变量的值,不会导致另一个值发生改变 ## 数组定义 ```go // 先定义后初始化 var array1 [3]string array1[0] = "beijing" array1[1] = "guangdong" array1[2] = "shanghai" fmt.Println(array1) // 定义并初始化 var array2 = [3]string{"beijing", "guangdong", "shanghai"} fmt.Println(array2) // 自动推导数组长度 var array3 = [...]int8{1, 2, 3, 4} fmt.Println(array3) // 指定下标初始化 var array4 = [5]bool{1: true, 3: false} fmt.Println(array4) // 运行结果: // [beijing guangdong shanghai] // [beijing guangdong shanghai] // [1 2 3 4] // [false true false false false] ``` ## 数组是值类型 ```go var array5 = [3]string{"beijing", "guangdong", "shanghai"} array6 := array5 fmt.Printf("array5: %s, array6: %s\n", array5, array6) array6[2] = "shandong" fmt.Printf("array5: %s, array6: %s\n", array5, array6) // 运行结果: // array5: [beijing guangdong shanghai], array6: [beijing guangdong shanghai] // array5: [beijing guangdong shanghai], array6: [beijing guangdong shandong] ``` >[info] 由上述例子可知:数组赋值后,两个变量是毫无关系。 ## 数组遍历 ```go var array7 = [3]string{"beijing", "guangdong", "shanghai"} // 方法一 for i := 0; i < len(array7); i++ { fmt.Println(array7[i]) } // 方法二【常用】 // i是键,v是值 for i, v := range array7 { fmt.Println(i, v) } // 运行结果: // beijing // guangdong // shanghai // 0 beijing // 1 guangdong // 2 shanghai ``` ## 多维数组 ```go var array8 = [3][2]int8{ {1, 2}, {3, 4}, {5, 6}, } fmt.Println(array8) // 变量二维数组 for _, v1 := range array8 { for _, v1 := range v1 { fmt.Printf("%d ", v1) } fmt.Println() } // 运行结果 // [[1 2] [3 4] [5 6]] // 1 2 // 3 4 // 5 6 ```