Go语言中的数组

Ryan
Ryan
发布时间:2026-08-25| 179人浏览过
原创

前言

很多 Go 初学者第一次接触数组时,最容易混淆的不是语法本身,而是它“长度固定”的设计限制。本文按声明、赋值、遍历到求和示例的顺序整理数组基础用法,保留关键代码和下标规则,帮助你快速判断数组该怎么写、什么时候该用 `for` 或 `for range`。

数组是 Go 里最基础的一类容器,但它和很多初学者熟悉的“可变长度列表”并不一样。理解它的关键,在于先抓住“长度固定”和“元素同类型”这两个约束,再去看声明、赋值和遍历的写法。下面按实际使用顺序梳理一遍,并用一个求和例子把前面的知识串起来。

什么是 Go 数组

数组可以理解为:一组固定长度、同类元素的集合。

这里有两个限制需要先记住:

  • 固定长度:数组在声明时就要写明长度,后续不能再改。
  • 同类元素:同一个数组中的元素必须是相同类型,不能混用。

这也是 Go 数组和很多动态语言列表最明显的区别。如果你已经知道数据项有几个,而且它们类型一致,数组就是一种直接、明确的表示方式。

数组怎么声明和赋值

先声明,再按下标赋值

比如,声明一个长度为 3、元素类型为 string 的数组:

展示 Go 数组固定长度、同类型和下标访问关系的暖色专栏配图
数组的结构与初始化数组最核心的约束,是长度固定、元素同类型,以及按下标访问。
var animals [3]string

赋值时使用索引,也就是下标。数组下标从 0 开始,最后一个下标是“长度减 1”。

animals[0] = "cat" // 给第一个元素赋值
animals[1] = "cattle" // 给第二个元素赋值
animals[2] = "sheep" // 给三个元素赋值

如果数组长度是 3,那么可用下标就是 0、1、2。写数组时,先确认长度和下标范围,能减少不少低级错误。

声明时直接初始化

数组也可以在声明的同时完成赋值:

展示 Go 数组遍历与求和流程的暖色专栏配图
遍历到求和的读取路径读数组内容时,`for range` 往往比手动下标更适合做统计和累加。
// 声明并赋值
var numbers = [3]int{1, 2, 3}

// 声明时指定索引赋值
// 假设给第2个、第3个元素赋值
var numbers1 = [3]int{1: 2, 3}

第一种写法最常见,含义也直观。第二种写法则是先指定某个索引位置的值,再继续补后面的元素,适合需要明确某一位内容时使用。

让编译器自动推导数组长度

如果你不想手动写长度,也可以交给编译器根据元素个数自动推算:

var cities = [...]string{"北京", "上海", "广州"} // 该数组的长度就是其元素的个数3.

这里的 ... 表示由初始化内容决定数组长度。这个写法在元素已经明确列出的场景里很实用,既少写一个数字,也避免长度和元素数量不一致。

数组如何遍历

数组常见的读取方式就是循环遍历。Go 里主要有两种写法。

使用 for 按下标遍历

如果你需要自己控制下标,或者要配合索引访问元素,可以用传统的 for 循环:

for i := 0; i < len(cities); i++ {
    // 使用索引获取数组的元素
    fmt.Println(cities[1])
}

这种方式的重点是通过 len(cities) 获取数组长度,再让下标从 0 递增到最后一位。实际使用时,通常会通过变量 i 访问元素。

使用 for range 遍历值和索引

如果既想拿到索引,也想直接拿到元素值,那么 for range 更简洁:

for index, city := range cities {
    // index为元素的索引,city为元素的值
    fmt.Println(index, city)
}

在这段代码里,index 表示索引,city 表示当前位置上的值。对于“读取每一项并处理”的场景,这种写法通常更清楚,也更符合 Go 的日常风格。

用一个例子看数组求和

前面的声明和遍历放在一起,最典型的小练习就是求数组所有元素的和。

// 声明一个数组
var nums = [5]int{1, 2, 3, 4, 5}
// 声明求和的结果变里
var result int

for _, num := range nums {
    result += num  // 依次将数组的元素相加
}

fmt.Println(result) // 输出 15

这段代码可以拆成三步理解:

  • 先声明一个包含 5 个整数的数组 nums。
  • 再准备一个整型变量 result 用来累计结果。
  • 最后通过 for range 依次取出每个元素,并累加到 result 中。

这里的 _ 表示当前不关心索引,只使用元素值 num。当你的目标只是统计、求和、求平均值时,这种写法会比手动操作下标更简洁。

几个容易记住的要点

  • 数组长度在声明时确定,之后不能修改。
  • 数组中的元素类型必须一致,比如都是 int 或都是 string。
  • 下标从 0 开始,最后一个下标是长度减 1。
  • 初始化时可以写固定长度,也可以用 ... 自动推导。
  • 遍历时既可以用 for,也可以用更常见的 for range。

如果你只是入门 Go,先把数组的这几种基础写法掌握住,后面再去理解切片时,会更容易看出两者在长度和使用场景上的差别。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。