Go语言数组详解
摘要本文参考菜鸟教程Go数组章节从零讲解数组定义、初始化、遍历、传参特性重点拆解入门头号误区数组长度属于类型、数组是值类型、数组与切片的本质差异配套完整可运行代码一、Go数组核心定义数组是长度固定、元素类型统一、内存连续的数据集合用于存放一组相同类型的数据。✅ 长度固定数组创建完成之后不能扩容、不能缩小✅长度是数组类型的一部分[5]int和[10]int是两种完全不同的数据类型类型不匹配无法赋值、传参、比较✅ 数组属于值类型。数组赋值、传入函数时会完整拷贝一份数据修改副本不会影响原始数组。拓展小知识内存连续意味着数组支持通过索引快速随机访问查询速度极快。二、数组声明与五种初始化方式2.1 基础语法var数组名[数组长度]数据类型示例定义长度为5的int数组vararr[5]int2.2 五种初始化写法方式1仅声明自动初始化为零值Go不存在无默认值的数组声明之后全部填充对应类型零值int→0string→bool→false指针→nil。packagemainimportfmtfuncmain(){vararr[5]intfmt.Println(arr)// [0 0 0 0 0]}方式2完整初始化所有元素// var标准写法vararr1[5]int[5]int{1,2,3,4,5}// 短变量声明开发常用arr2:[5]int{1,2,3,4,5}fmt.Println(arr1)fmt.Println(arr2)方式3使用...自动推导长度不想手动填写数组长度可以使用...编译器自动统计元素个数确定数组长度。arr:[...]int{10,20,30,40}fmt.Println(len(arr))// 4⚠️易错提醒...只能用于数组切片不能使用多维数组仅最外层支持...内层数组不允许。方式4指定下标局部初始化只给指定索引赋值其余位置自动填充零值。适合稀疏数组场景。arr:[5]int{1:666,3:888}fmt.Println(arr)// [0 666 0 888 0]方式5部分初始化剩余补零初始化元素数量少于数组长度未赋值位置自动填充零值。arr:[5]int{1,2}fmt.Println(arr)// [1 2 0 0 0]❌编译错误提醒初始化元素总数不能大于数组定义长度否则直接编译失败。三、数组访问与遍历3.1 通过索引访问元素数组下标从0开始合法区间0 ~ len(arr)-1funcmain(){arr:[3]int{11,22,33}fmt.Println(arr[0])// 11fmt.Println(arr[2])// 33}⚠️致命坑索引越界不会出现编译警告运行时直接触发panic程序异常崩溃编码时一定要注意边界3.2 两种遍历方式普通for循环依靠下标遍历适用场景需要手动控制遍历起点、终点、步长arr:[3]int{100,200,300}fori:0;ilen(arr);i{fmt.Printf(下标%d值%d\n,i,arr[i])}for range遍历日常优先推荐语法简洁适合完整遍历整个数组arr:[3]int{100,200,300}// 同时接收下标与数值foridx,val:rangearr{fmt.Println(idx,val)}// 不需要下标使用空白标识符 _ 舍弃避免变量未使用编译报错for_,val:rangearr{fmt.Println(val)}补充range遍历数组时每次循环得到的val是数组元素的拷贝修改val无法改变原数组内容。四、数组传参大坑值类型拷贝核心结论数组是值类型函数传参时会完整拷贝整个数组修改副本无法影响原数组。错误演示packagemainimportfmtfuncchangeArr(arr[3]int){arr[0]999}funcmain(){arr:[3]int{1,2,3}changeArr(arr)fmt.Println(arr)// [1 2 3]原值没有任何变化}原理传入函数内的只是原数组的拷贝函数操作的是全新副本和外部数组内存相互独立。额外性能隐患如果数组长度很大完整拷贝会造成大量内存开销严重影响性能两种可行解决方案方案1传递数组指针传递数组地址函数内部操作原始数组内存funcchangeArr(arr*[3]int){arr[0]999// Go语法糖可以不用写(*arr)[0]}funcmain(){arr:[3]int{1,2,3}changeArr(arr)fmt.Println(arr)// [999 2 3]}缺点数组指针依旧绑定固定长度通用性很差。方案2数组转为切片项目开发首选开发中基本不会使用数组指针更推荐把数组转为切片传递摆脱固定长度限制。funcchangeSlice(s[]int){s[0]999}funcmain(){arr:[3]int{1,2,3}changeSlice(arr[:])// arr[:] 将数组转为切片fmt.Println(arr)// [999 2 3]}五、数组比较规则Go数组支持、!比较但有严格限制只有长度相同、元素类型相同的两个数组才允许比较长度不一致直接触发编译错误因为二者不属于同一种类型。补充数组不支持 、 、 、大小比较funcmain(){a:[2]int{1,2}b:[2]int{1,2}c:[3]int{1,2,3}fmt.Println(ab)// true// fmt.Println(a c) 编译报错类型不一致}六、多维数组拓展实际开发偶尔会用到二维数组简单示例packagemainimportfmtfuncmain(){// 2行3列二维数组arr:[2][3]int{{1,2,3},{4,5,6},}fmt.Println(arr[0][1])// 2}重点多维数组依然遵守规则[2][3]int和[3][2]int是两种不同类型。七、数组 vs 切片核心对比特性数组 [N]T切片 []T长度固定不变长度属于类型一部分长度动态支持append扩容类型兼容[5]int 和 [10]int 是不同类型同类型切片之间完全兼容传参机制值传递完整拷贝大数据下性能差引用语义共享底层数组开销小比较运算支持、!不支持直接使用比较nil除外开发场景极少使用仅元素固定场景绝大多数业务场景首选八、零基础高频易错点汇总[5]int和[10]int属于不同类型不能赋值、传参、比较数组是值类型赋值、传参都会产生拷贝修改副本不会影响原数组大数组直接传递性能低下优先使用数组指针或者转为切片数组长度固定无法动态扩容业务开发优先选择切片数组索引越界不会编译报错运行直接触发panic程序崩溃...自动推导长度语法仅适用于数组切片、多维数组内层不能使用数组初始化元素数量不能超过数组定义长度数组未赋值的元素自动填充对应类型零值range遍历数组循环变量val是拷贝值修改val无法更改原数组数组仅支持 和 !不能使用大于小于进行比较。九、文末总结Go数组三大核心特点定长、值类型、长度参与类型构成一定要抛开其他语言数组的固有思维数组直接传参会发生完整拷贝如果需要修改原始数据推荐转为切片数组只适合元素数量固定不变的场景真实项目99%场景使用切片数组是理解切片的基础弄懂数组后续学习切片会轻松很多。参考资料菜鸟教程 Go语言数组 https://www.runoob.com/go/go-arrays.html

相关新闻

技术选型评估模型:如何像3年老粉一样立体认知技术栈

技术选型评估模型:如何像3年老粉一样立体认知技术栈

1. 这篇文章真正要解决的问题 作为一名在技术社区活跃多年的开发者,我经常遇到一个看似与技术无关,实则深刻影响团队协作和项目成败的问题: 如何客观、理性地评价一个技术项目、一个开源库,甚至是一个技术决策的长期价值&#xf…

2026/8/2 16:58:04阅读更多 →
5分钟快速实现Android Studio界面中文化:告别英文障碍,开启母语开发新时代

5分钟快速实现Android Studio界面中文化:告别英文障碍,开启母语开发新时代

5分钟快速实现Android Studio界面中文化:告别英文障碍,开启母语开发新时代 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLa…

2026/8/2 16:56:03阅读更多 →
终极指南:BiliTools如何用AI智能总结彻底改变你的B站学习方式

终极指南:BiliTools如何用AI智能总结彻底改变你的B站学习方式

终极指南:BiliTools如何用AI智能总结彻底改变你的B站学习方式 【免费下载链接】BiliTools 本项目已停止维护。 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 还在为B站海量的学习视频感到无从下手吗?每天收藏的技术教程、知识…

2026/8/2 16:56:02阅读更多 →
抖音批量下载终极指南:从单视频到全生态内容管理

抖音批量下载终极指南:从单视频到全生态内容管理

抖音批量下载终极指南:从单视频到全生态内容管理 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖…

2026/8/2 19:45:02阅读更多 →
hexo-theme-inside PWA实战:实现沉浸式设计与离线访问的秘诀

hexo-theme-inside PWA实战:实现沉浸式设计与离线访问的秘诀

hexo-theme-inside PWA实战:实现沉浸式设计与离线访问的秘诀 【免费下载链接】hexo-theme-inside 🌈 SPA, Flat and clean theme for Hexo https://blog.oniuo.com/theme-inside 项目地址: https://gitcode.com/gh_mirrors/hex/hexo-theme-inside …

2026/8/2 19:45:02阅读更多 →
10分钟上手RainbowMiner:从安装到配置的快速入门教程

10分钟上手RainbowMiner:从安装到配置的快速入门教程

10分钟上手RainbowMiner:从安装到配置的快速入门教程 【免费下载链接】RainbowMiner GPU/CPU Mining script with intelligent profit-switching between miningpools, algorithms, miners, using all possible combinations of devices (NVIDIA, AMD, CPU). Featur…

2026/8/2 19:45:02阅读更多 →
IDM激活脚本终极指南:永久免费解锁高速下载的智能解决方案

IDM激活脚本终极指南:永久免费解锁高速下载的智能解决方案

IDM激活脚本终极指南:永久免费解锁高速下载的智能解决方案 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script IDM激活脚本是一款专为Windows用户设计的开…

2026/8/2 19:45:02阅读更多 →
如何通过异步子代理架构实现5倍AI工作流性能提升

如何通过异步子代理架构实现5倍AI工作流性能提升

如何通过异步子代理架构实现5倍AI工作流性能提升 【免费下载链接】pi-subagents Pi extension for async subagent delegation with truncation, artifacts, and session sharing 项目地址: https://gitcode.com/GitHub_Trending/pi/pi-subagents pi-subagents 是一个专…

2026/8/2 19:45:02阅读更多 →
为什么选择BootNTRSelector?比原版BootNTR快在哪里?

为什么选择BootNTRSelector?比原版BootNTR快在哪里?

为什么选择BootNTRSelector?比原版BootNTR快在哪里? 【免费下载链接】BootNTR 项目地址: https://gitcode.com/gh_mirrors/bo/BootNTR BootNTRSelector是BootNTR的改良版本,它允许用户选择要加载的NTR版本,并且比常规Boot…

2026/8/2 19:43:02阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/2 1:29:34阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/2 2:32:55阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/2 2:09:20阅读更多 →