Z
ZHANK
复合类型

数组

固定长度 [N]T、值类型数组(赋值即拷贝)、... 自动推断长度

数组

Go 的数组是固定长度的值类型——赋值时复制整个数组,而不是共享引用。

学完本章你将: 掌握 [N]T 声明、值类型特性、... 自动推断长度。


数组声明

go
package main

import "fmt"

func main() {
    // 指定长度
    var arr1 [5]int                           // [0 0 0 0 0]
    arr2 := [5]int{1, 2, 3, 4, 5}             // [1 2 3 4 5]
    arr3 := [...]int{1, 2, 3}                 // 自动推断长度 [3]int

    // 指定索引初始化
    arr4 := [5]int{0: 10, 4: 50}              // [10 0 0 0 50]

    fmt.Println(arr2[0])  // 1
    fmt.Println(len(arr3)) // 3
}

值类型——数组赋值是拷贝

go
a := [3]int{1, 2, 3}
b := a      // 完整拷贝(值类型!)

b[0] = 999
fmt.Println(a)  // [1 2 3] —— a 没变!
fmt.Println(b)  // [999 2 3]

// ⚠️ 和 Java/C# 不同——那里数组是引用类型

数组作为参数

go
// ❌ 每次调用都会拷贝整个数组(开销大)
func process(arr [100]int) { }

// ✅ 通常用切片代替(不拷贝数据)
func process(arr []int) { }

💡 实际开发中基本不用数组——用 切片(Slice)。数组只用作底层存储。