一、数组
数组用于存放相同类型的值,数组一旦确定了长度,在超过了这个长度之后就不能再往其中添加元素。
1、简单类型的数组
package main
import (
"fmt"
)
func main() {
var arr1 [3]int // 元素会被自动初始化为0值 => {0, 0, 0}
arr1[0] = 1
arr1[1] = 2
arr1[2] = 3
arr2 := [3]int{1} // 位提供初始化的元素被初始化为零值 => {1, 0, 0}
arr3 := [3]int{1, 2: 3} // 指定索引2的元素初始化值为3 => {1, 0, 3}
arr4 := [...]int{1, 2, 3} // 不直接指定长度,编译器会根据元素个数给定长度 => {1, 2, 3}
arr5 := [...]int{1, 2: 3} // 指定索引 2 的元素初始化值为3,会影响该数组长度 => {1, 0, 3}
fmt.Println(arr1, arr2, arr3, arr4, arr5)
}
2、复合类型的数组
package main
import "fmt"
type People struct {
name string
age int
}
func main() {
peopleArray1 := [2]People{
{name: "张三", age: 17},
{name: "李四", age: 18},
}
peopleArray2 := [...]People{
{"王五", 19}, // 省略结构体标签
{"赵六", 20},
}
fmt.Println(peopleArray1)
fmt.Println(peopleArray2)
}
3、多维数组
如果要使用...,只能在第一维中使用。len()和cap()也只能返回第一维的长度和容量。如果数组中的元素支持==判断,那么该数组也支持==判断。
package main
import "fmt"
func main() {
arr1 := [...][3]int{}
arr2 := [4][2]int{{11, 12}, {21, 22}, {31, 32}, {41, 42}}
arr3 := [...][2]int{{11, 12}, {21, 22}, {31, 32}, {41, 42}}
fmt.Println(arr1)
fmt.Println(arr2)
fmt.Println(arr3)
fmt.Println(len(arr2))
fmt.Println(cap(arr2))
fmt.Println(arr2 == arr3)
}