Go语言数组的用法

简介: Go语言中,数组是固定长度、同类型元素的序列,长度属类型组成部分,编译期确定。虽少直接使用,但为理解切片基础。支持声明、初始化、索引访问、遍历及相等比较(需类型完全相同)。

数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的,所以在Go语言中很少直接使用数组。


和数组对应的类型是 Slice(切片),Slice 是可以增长和收缩的动态序列,功能也更灵活,但是想要理解 slice 工作原理的话需要先理解数组,所以本节主要为大家讲解数组的使用

Go语言数组的声明

数组的声明语法如下:

var 数组变量名 [元素数量]Type

语法说明如下所示:

  • 数组变量名:数组声明及使用时的变量名。
  • 元素数量:数组的元素数量,可以是一个表达式,但最终通过编译期计算的结果必须是整型数值,元素数量不能含有到运行时才能确认大小的数值。
  • Type:可以是任意基本类型,包括数组本身,类型为数组本身时,可以实现多维数组。


数组的每个元素都可以通过索引下标来访问,索引下标的范围是从 0 开始到数组长度减 1 的位置,内置函数 len() 可以返回数组中元素的个数。

var a [3]int             // 定义三个整数的数组
fmt.Println(a[0])        // 打印第一个元素
fmt.Println(a[len(a)-1]) // 打印最后一个元素
// 打印索引和元素
for i, v := range a {
    fmt.Printf("%d %d\n", i, v)
}
// 仅打印元素
for _, v := range a {
    fmt.Printf("%d\n", v)
}

默认情况下,数组的每个元素都会被初始化为元素类型对应的零值,对于数字类型来说就是 0,同时也可以使用数组字面值语法,用一组值来初始化数组:

var q [3]int = [3]int{1, 2, 3}
var r [3]int = [3]int{1, 2}
fmt.Println(r[2]) // "0"

在数组的定义中,如果在数组长度的位置出现“...”省略号,则表示数组的长度是根据初始化值的个数来计算,因此,上面数组 q 的定义可以简化为:

q := [...]int{1, 2, 3}
fmt.Printf("%T\n", q) // "[3]int"

数组的长度是数组类型的一个组成部分,因此 [3]int 和 [4]int 是两种不同的数组类型,数组的长度必须是常量表达式,因为数组的长度需要在编译阶段确定。

q := [3]int{1, 2, 3}
q = [4]int{1, 2, 3, 4} // 编译错误:无法将 [4]int 赋给 [3]int

比较两个数组是否相等

如果两个数组类型相同(包括数组的长度,数组中元素的类型)的情况下,我们可以直接通过较运算符(==!=)来判断两个数组是否相等,只有当两个数组的所有元素都是相等的时候数组才是相等的,不能比较两个类型不同的数组,否则程序将无法完成编译。

a := [2]int{1, 2}
b := [...]int{1, 2}
c := [2]int{1, 3}
fmt.Println(a == b, a == c, b == c) // "true false false"
d := [3]int{1, 2}
fmt.Println(a == d) // 编译错误:无法比较 [2]int == [3]int

遍历数组——访问每一个数组元素

遍历数组也和遍历切片类似,代码如下所示:

var team [3]string
team[0] = "hammer"
team[1] = "soldier"
team[2] = "mum"
for k, v := range team {
    fmt.Println(k, v)
}

代码输出结果:

0 hammer

1 soldier

2 mum

代码说明如下:

  • 第 6 行,使用 for 循环,遍历 team 数组,遍历出的键 k 为数组的索引,值 v 为数组的每个元素值。
  • 第 7 行,将每个键值打印出来。
相关文章
|
3月前
|
存储 安全 芯片
【2026最新】U盘检测工具MyDiskTest安装使用教程(附安装包+图文步骤)
MyDiskTest是一款轻量免安装的Windows U盘/存储卡检测工具,专治“扩容盘”(虚标容量假盘),支持快速扩容检测、文件对比验证、读写速度测试及芯片真伪识别。纯中文界面,解压即用,操作简单,买新盘后验货首选。
|
4月前
|
存储 NoSQL 项目管理
【2026最新】Notion中文版安装和使用图文教程
Notion是一款全能型AI工作台,集成笔记、文档、数据库、项目管理、知识库与日历看板于一体。支持多端同步、中文界面、丰富模板及团队协作,个人版完全免费,功能强大且易上手。(239字)
|
4月前
|
存储 设计模式 人工智能
从无状态到有状态:长时运行 Agent 的 5 种架构模式
本文详解长时运行AI Agent的5大生产级架构模式:Checkpoint-and-Resume实现断点续传;Delegated Approval支持原地暂停与人机协同;Memory-Layered Context分层管理长期记忆与工作记忆;Ambient Processing赋能无提示事件驱动;Fleet Orchestration实现多Agent协同治理——让Agent真正成为可靠、有状态、可运维的系统进程。
601 3
从无状态到有状态:长时运行 Agent 的 5 种架构模式
|
4月前
|
安全 Go
Go语言bool类型(布尔类型)
本文详解Go语言布尔类型:仅含true/false;支持!、&&、||操作(含短路特性);比较需同类型;不支持与数字隐式转换,须用if或封装函数(如btoi/itob)显式转换;强制类型转换会编译报错。
|
4月前
|
机器学习/深度学习 传感器 算法
用 200 元改了一个普通摄像头,测直径稳定到 ±5 微米
本项目实现了一种低成本、高鲁棒的圆形工件视觉检测方案:仅用200元USB摄像头,无需远心镜头与深度学习,15ms内完成检测,直径重复精度达±2μm,圆心定位误差<0.01mm;自动抑制灰尘、划痕、油污干扰,换型一键标定,结果可解释。
410 3
|
4月前
|
存储 消息中间件 监控
【消息队列MQ】消息顺序性:保证方案、适用场景
本文系统解析MQ消息顺序性,涵盖定义、乱序根因、全链路保障方案、适用场景、性能权衡、主流产品对比、典型坑点及最佳实践8大维度。聚焦局部/全局顺序本质差异,强调“发送→存储→消费”全链路一致,并指出90%故障源于消费端乱序。兼顾理论深度与落地可行性,助力高效、可靠选型与实施。
|
4月前
|
消息中间件 监控 Kafka
【消息队列MQ】消息丢失:全链路原因、解决方案、消息可靠性保证
消息队列MQ全链路防丢失体系:覆盖生产→Broker→消费三阶段,直击6大关键节点风险;涵盖确认机制、同步刷盘、主从复制、手动提交Offset、事务消息、死信兜底等核心方案,兼顾可靠性与性能折中。
|
4月前
|
数据采集 供应链 物联网
RFID仓库进出入与盘点采集精细化管理
RFID技术赋能仓库智能化管理,实现入库、出库、盘点全流程自动化采集与实时校验。替代人工扫码记账,提升作业效率5–10倍,杜绝错发漏发与盘点误差,确保库存数据精准、实时、可溯,助力仓储精细化、数字化升级。(238字)
|
4月前
|
存储 算法 安全
新增密级管理能力,筑牢数据安全合规防线——基于阿里云密评合规框架的专业实践
本文以某制造企业8000万元数据泄露事件为引,揭示“全员可见”的粗放加密之弊,强调密级管理才是数据安全核心。通过对比传统加密与密级管理差异,剖析越权访问、密钥连锁泄露等风险,并介绍阿里云KMS、CloudHSM、RAM及国密算法四大能力,详解第三方软件如何实现密级标签映射、权限分级绑定与合规审计闭环,助力企业满足等保2.0、密评及《数据安全法》要求。(239字)
|
文字识别 iOS开发 MacOS
【uTools】uTools下载安装图文教程(国产良心软件)
uTools是一款极简、插件化的国产效率工具,通过Alt+Space呼出搜索框,快速调用OCR、翻译、截图等数百款免费插件。“一切皆插件”设计支持高度自定义,适配Windows/macOS/Linux,提升多场景办公效率。(239字)

热门文章

最新文章