📅  最后修改于: 2023-12-03 15:01:00.843000             🧑  作者: Mango
数组是一种由相同类型元素组成的固定长度序列。在Go语言中,数组一旦定义后,长度就无法再更改。数组的元素可以是任何基本类型,例如整型、浮点型、布尔型和字符串,也可以是自定义类型。
数组的定义格式为 [n]T
,其中 n
表示数组的长度, T
表示数组元素的类型。例如一个长度为3的整型数组定义为:var arr [3]int
。数组可以使用一对大括号 {}
进行初始化,多个元素之间使用 ,
分隔。
var arr1 [3]int // 声明一个长度为3的整型数组,元素默认是0
arr2 := [3]int{1, 2, 3} // 声明一个长度为3的整型数组,并初始化为{1,2,3}
arr3 := [...]int{4, 5, 6} // 声明一个长度不确定的整型数组(根据初始化值来确定长度),并初始化为{4,5,6}
arr4 := [2][3]int{{1, 2, 3}, {4, 5, 6}} // 声明一个二维数组,并初始化为{{1,2,3},{4,5,6}}
可以使用 len()
函数获取数组的长度。
arr := [3]string{"Hello", "World", "!"}
fmt.Println(len(arr)) // 输出 3
在Go语言中,可以使用 for...range
语句遍历数组元素。for...range
的作用是返回两个值,一个是数组元素的下标,另一个是数组元素的值。
arr := [3]string{"Hello", "World", "!"}
for index, value := range arr {
fmt.Println(index, value)
}
// 输出:
// 0 Hello
// 1 World
// 2 !
可以使用下标来访问数组元素,下标从0开始。如果尝试访问超过数组长度的下标,编译器会输出运行时错误。
arr := [3]string{"Hello", "World", "!"}
fmt.Println(arr[0]) // 输出 Hello
可以使用 ==
操作符比较两个数组是否相等。只有数组元素的顺序、类型、长度都完全相同才会返回 true。
arr1 := [3]string{"Hello", "World", "!"}
arr2 := [3]string{"Hello", "World", "!"}
fmt.Println(arr1 == arr2) // 输出 true
在Go语言中,数组一般作为参数时使用指针。
func PrintArray(arr *[3]string) {
for _, value := range *arr {
fmt.Println(value)
}
}
数组切片是一个引用类型,它是对底层数组的一个引用。数组切片的长度是可以变化的,可以使用 append()
函数动态增加元素。
数组切片的定义和初始化和数组类似,但是 []
中不需要指定长度。
var slice1 []int // 定义一个整型数组切片
slice2 := []string{"Hello", "World", "!"} // 声明一个字符串数组切片,并初始化为{"Hello","World","!"}
slice3 := make([]int, 5) // 声明一个整型数组切片,并分配5个元素
slice4 := make([]int, 5, 10) // 声明一个整型数组切片,分配5个元素,容量为10个元素
可以使用 len()
函数获取数组切片的长度,使用 cap()
函数获取数组切片的容量。
slice := []int{1, 2, 3, 4, 5}
fmt.Println(len(slice)) // 输出 5
fmt.Println(cap(slice)) // 输出 5
可以使用 arr[start:end]
语法获取数组切片的子集。
slice := []int{1, 2, 3, 4, 5}
fmt.Println(slice[1:3]) // 输出 [2 3]
可以使用 append()
函数动态增加数组切片元素。
slice := []int{1, 2, 3, 4, 5}
slice = append(slice, 6, 7)
fmt.Println(slice) // 输出 [1 2 3 4 5 6 7]
可以使用 copy()
函数复制数组切片。
slice1 := []int{1, 2, 3, 4, 5}
slice2 := make([]int, 5)
copy(slice2, slice1)
fmt.Println(slice2) // 输出 [1 2 3 4 5]