数组
定义数组
var arr1 [10]int
var arr2 = [10]int{}
var arr3 = [5]int{2,3}
var arr4 = [5] int{3:5}//下标3的位置赋值5
arr5 := [10]int{}
/*
结果:
[0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]
[2 3 0 0 0]
[0 0 0 5 0]
[0 0 0 0 0 0 0 0 0 0]
*/
遍历数组
通过range来遍历数组会有两个返回值,其中第一个为数组的索引,第二个位置为对应的值
for index, value := range arr1 {
fmt.Printf("index: %d, value: %d\n", index, value)
}
多维数组
var arr4 = [5][5]int{
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
}
/*
[[1 2 3 4 5] [6 7 8 9 10] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]
*/
数组默认值传递
切片
数组长度固定,切片长度可变
定义切片
//方法一
var s1 = []int{}
//方法二
var s2 = []int{1, 2, 3}
//方法三
var s3 = make([]int, 5)
//方法四
var s4 = make([]int, 5, 10)
切片操作
我们可以通过如下的方式在数组和切片上继续获取切片
func main() {
arr := [5]int{1, 2, 3, 4, 5}
s := []int{6, 7, 8, 9, 10}
s1 := arr[2:4]//下标,前闭后开
s2 := arr[:3]
s3 := arr[2:]
s4 := s[1:3]
fmt.Println("s1:", s1)
fmt.Println("s2:", s2)
fmt.Println("s3:", s3)
fmt.Println("s4:", s4)
}
程序的输出结果如下
s1: [3 4]
s2: [1 2 3]
s3: [3 4 5]
s4: [7 8]
切片的扩充与拼接
func main() {
a := []int{1, 2, 3}
b := a[1:3]
b = append(b, 4)
b = append(b, 5)
b = append(b, 6)
b = append(b, 7)
fmt.Println(a)
fmt.Println(b)
}
程序输出结果如下
[1 2 3]
[2 3 4 5 6 7]
将两个切片进行拼接
func main() {
a := []int{1, 2, 3}
b := a[1:3]
fmt.Println(b)
a = append(a, b...)
fmt.Println(a)
}
将一个切片的值复制给另一个切片
func main() {
a := []int{1, 2, 3}
b := make([]int, 3)
copy(b, a)//把a复制给b
fmt.Println(a)
fmt.Println(b)
}