0Pricing
Go Academy · 课时

数组:定长集合

数组字面量、索引与长度

数组:定长集合 是 CoddyKit 上的免费 Go Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Go Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Go Academy 课程共包含 4 节课。

什么是数组?

Go 中的数组是由相同类型元素组成的定长序列。长度是类型的一部分:[3]int 和 [4]int 是不同的类型。

  • 数组是值类型——赋值时会复制整个数组
  • 长度在编译时始终是已知的
  • 通常不会直接使用;大多数任务更适合使用切片

数组字面量

使用字面量声明并初始化数组:

package main

func main() {
    primes := [5]int{2, 3, 5, 7, 11}
    names  := [3]string{"Alice", "Bob", "Carol"}
    flags  := [4]bool{true, false, true, false}
    _ = primes; _ = names; _ = flags
}

数组长度与索引

使用 len() 获取长度,并使用从零开始的索引读取或写入元素:

package main
import "fmt"

func main() {
    scores := [3]int{90, 85, 92}
    fmt.Println(len(scores)) // 3
    fmt.Println(scores[0])   // 90
    scores[1] = 100
    fmt.Println(scores)      // [90 100 92]
}

数组字面量中的省略号

使用 [...] 让编译器为您计算元素数量:

package main
import "fmt"

func main() {
    days := [...]string{"Mon","Tue","Wed","Thu","Fri"}
    fmt.Println(len(days)) // 5
}

数组是值类型

赋值或传递数组时,Go 会复制整个数组。修改副本不会影响原数组:

package main
import "fmt"

func main() {
    a := [3]int{1, 2, 3}
    b := a     // full copy
    b[0] = 99
    fmt.Println(a) // [1 2 3] — unchanged
    fmt.Println(b) // [99 2 3]
}

比较数组

类型和长度相同的数组可以使用 == 和 != 进行比较:

package main
import "fmt"

func main() {
    x := [3]int{1, 2, 3}
    y := [3]int{1, 2, 3}
    z := [3]int{1, 2, 4}
    fmt.Println(x == y) // true
    fmt.Println(x == z) // false
}

二维数组

可以嵌套数组来构成网格或矩阵:

package main
import "fmt"

func main() {
    grid := [2][3]int{
        {1, 2, 3},
        {4, 5, 6},
    }
    fmt.Println(grid[1][2]) // 6
}

遍历数组

使用传统的 for 循环或 range 进行遍历:

package main
import "fmt"

func main() {
    nums := [4]int{10, 20, 30, 40}
    for i, v := range nums {
        fmt.Printf("[%d] = %d\n", i, v)
    }
}

数组与切片

主要区别如下:

  • 数组:大小固定,是值类型,大小属于类型的一部分
  • 切片:大小可变,是引用类型,由数组提供底层存储
  • 在实际开发中,除非需要固定的编译时大小,否则请使用切片(例如 SHA-256 哈希的 [32]byte)

常见陷阱

请注意以下问题:

  • 索引超出范围——如果 i >= len(arr),Go 会在运行时触发 panic
  • 向函数传递大型数组会产生开销很高的复制操作——请改用指针或切片
  • 请牢记 [3]int 和 [4]int 是不兼容的类型

快速检查

[...]string{"a","b","c"} 的长度是多少?

回顾:数组

要点:

  • 数组具有固定的编译时长度,并且长度是类型的一部分
  • 数组是值类型——赋值时会复制所有元素
  • 使用 len() 和从零开始的索引
  • 大多数集合操作优先使用切片

练习提示

请声明一个包含 5 个整数的数组,将值 100 赋给第三个元素,然后使用 range 打印数组。

常见问题解答

「数组:定长集合」课时是免费的吗?

是的 — 「数组:定长集合」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Go Academy 课程的其余内容,请升级到 CoddyKit PRO。 Go Academy 课程共包含 4 节课。

「数组:定长集合」这节课中我会学到什么?

数组字面量、索引与长度 你通过在浏览器中直接运行的动手代码来练习 Go Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Go Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Go Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「数组:定长集合」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Go Academy 课中编写并运行代码吗?

能。每节 Go Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 数组:定长集合
  2. 切片:动态列表
  3. 映射:键值存储
  4. 使用 range 遍历集合
← 返回 Go Academy