一、定义

package main

import "fmt"

func main() {

	// 一维数组
	// 声明一个长度为5的整型数组的语法,它并没有给数组中的元素赋值,因此不需要赋值符号=
	var arr_1 [5]int
	fmt.Println(arr_1) // [0 0 0 0 0]

	arr_2 := [5]int{1, 2, 3, 4, 5}
	fmt.Println(arr_2) // [1 2 3 4 5]

	var arr_3 = [5]int{1, 2, 3, 4, 5}
	fmt.Println(arr_3) // [1 2 3 4 5]

	// 让编译器自动根据数组元素个数判断数组长度,实际就是[6]int
	arr_4 := [...]int{1, 2, 3, 4, 5, 6}
	fmt.Println(arr_4) // [1 2 3 4 5 6]

	// 指定下标的元素 下标:元素值
	arr_5 := [4]int{0: 1, 2: 2, 3: 3}
	fmt.Println(arr_5) // [1 0 2 3]

	// 二维数组
	arr_6 := [3][5]int{{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}}
	fmt.Println(arr_6) // [[1 2 3 4 5] [6 7 8 9 10] [11 12 13 14 15]]

	arr_7 := [...][5]int{{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {0: 11, 2: 12, 3: 13, 4: 14}}
	fmt.Println(arr_7) //[[1 2 3 4 5] [6 7 8 9 10] [11 0 12 13 14]]
}

二、注意

1、=:=的区别

  • = 是赋值操作符,用于将右侧的值赋给左侧的变量。在使用=时,左侧的变量必须已经被声明过。
  • := 是声明并赋值操作符,用于同时声明变量并将右侧的值赋给该变量。在使用:=时,左侧的变量名必须是一个新的变量,且不能已经被声明过。使用:=可以简化变量的声明和赋值过程。

2、数组长度是定义后是不可变的

package main

import "fmt"

func main() {
	arr_1 := [5]int{1, 2, 3, 4, 5}
	arr_1[5] = 6
	fmt.Println(arr_1)// 异常:invalid argument: index 5 out of bounds [0:5]
}

3、数组是值传递,在函数之间传递的是值,因此如果数组的值很大,对内存开销很大

package main

import "fmt"

func main() {

	arr_1 := [5]int{1, 2, 3, 4, 5}
	fmt.Println("修改之前:", arr_1) // 修改之前: [1 2 3 4 5]
	updateItem(arr_1)
	fmt.Println("修改之后:", arr_1) // 修改之后: [1 2 3 4 5]
    
    // 调用updateItem2将arr_1的指针传递进去
    updateItem2(&arr_1)
	fmt.Println("修改之后:", arr_1) // 修改之后: [1 11 3 4 5]

}

func updateItem(a [5]int) {
    // 这里的a的值只是arr_1的值copy出来的副本,并不是真的修改了arr_1里的值
	a[1] = 11
	fmt.Println("updateItem-修改之后:", a) // updateItem-修改之后: [1 11 3 4 5]
}

// updateItem2接受一个长度5整数数组的指针
func updateItem2(a *[5]int) {
    // 这里的a的值只是arr_1的值copy出来的副本,并不是真的修改了arr_1里的值,除非将arr_1作为引用类型传递
	a[1] = 11
	fmt.Println("updateItem2-修改之后:", a) // updateItem-修改之后: [1 11 3 4 5]
}

4、数组赋值

只有相同长度相同类型的数组才能相互赋值,反之不行

package main

import "fmt"

func main() {

	arr := [5]int{1, 2, 3, 4, 5}

	var arr_1 [5]int = arr
	fmt.Println(arr_1)
	var arr_2 [6]int = arr // cannot use arr (variable of type [5]int) as [6]int value in variable declaration
	fmt.Println(arr_2)

}