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

相关新闻

多模态推理:诊断型AI从特征融合到临床决策的范式跃迁

多模态推理:诊断型AI从特征融合到临床决策的范式跃迁

1. 从“看图说话”到“望闻问切”:诊断型AI的范式跃迁 最近和几位在医疗科技公司做AI产品的朋友聊天,大家不约而同地都在讨论一个词:多模态推理。这让我想起几年前,我们还在为某个影像AI模型能准确识别肺结节而欢呼,觉…

2026/10/17 19:11:18 阅读更多 →
深入解析CPU指令流水线:从5级模型到现代优化实战

深入解析CPU指令流水线:从5级模型到现代优化实战

1. 项目概述:为什么指令流水线是CPU性能的基石 如果你拆开过任何一台现代计算机,看到过那个小小的CPU芯片,可能会好奇,这么一小块硅片,是如何以每秒数十亿次的速度执行我们编写的程序的?答案的核心&#xf…

2026/10/17 17:46:29 阅读更多 →
通义千问在钉钉群聊中触发幻觉?用这8个Prompt Engineering黄金约束模板,将事实错误率从31.6%压降至≤2.4%

通义千问在钉钉群聊中触发幻觉?用这8个Prompt Engineering黄金约束模板,将事实错误率从31.6%压降至≤2.4%

更多请点击: https://codechina.net 第一章:通义千问在钉钉群聊中触发幻觉的实证分析 在钉钉群聊环境中,通义千问(Qwen)作为AI助手接入后,其响应内容偶现与事实严重偏离的“幻觉”现象。此类问题并非随机噪…

2026/10/11 1:56:54 阅读更多 →

最新新闻

Flutter跨平台开发实战:鸿蒙适配洗衣房打卡应用全流程

Flutter跨平台开发实战:鸿蒙适配洗衣房打卡应用全流程

大学宿舍楼的洗衣房,永远是一场没有硝烟的战争。高峰期洗衣机全满,有人把衣服丢进去就忘了取,后边排队的人只能干瞪眼。某高校的洗衣房负责人找过来,说想做一个打卡小应用——让同学用手机记录洗衣机的使用开始和结束时间&#xf…

2026/10/17 21:23:32 阅读更多 →
密码学基础算法实战指南:对称加密、非对称加密、哈希与MAC的选型与落地

密码学基础算法实战指南:对称加密、非对称加密、哈希与MAC的选型与落地

1. 项目概述:这套算法体系到底在解决什么问题接手过几个带用户体系和数据交换的项目之后,我最大的感受是:密码学算法不是数学课上的抽象概念,而是每个开发者迟早要面对的工程选型。APP登录、Web后台、小程序、服务间接口通信&…

2026/10/17 21:23:32 阅读更多 →
Java实现HmacSHA256加密:从接口签名翻车到工程实践

Java实现HmacSHA256加密:从接口签名翻车到工程实践

1. 从一个接口签名翻车现场说起去年帮一个做支付对接的朋友排查线上问题,对方技术负责人甩过来一句:“你们回调过来的签名,我们验不过。”当时第一反应是密钥配错了,结果两边把密钥贴出来一比对,一模一样。再查参数拼接…

2026/10/17 21:23:32 阅读更多 →
沙盒隔离实战:Sandboxie安装配置与疑难排障全攻略

沙盒隔离实战:Sandboxie安装配置与疑难排障全攻略

1. 沙盒到底是什么:先搞懂Sandboxie隔离的逻辑很多人第一次听说沙盒(Sandbox),脑子里冒出来的画面是:一个装着程序的大盒子里,程序在里面怎么折腾都出不来,关掉盒子之后一切恢复原样。这个比喻方…

2026/10/17 21:23:32 阅读更多 →
卡尔曼滤波实战:从状态空间模型到Q/R参数调优

卡尔曼滤波实战:从状态空间模型到Q/R参数调优

做时序分析的人,迟早会撞上卡尔曼滤波。这个算法在状态空间模型里几乎就是“下篇”的代名词:上一篇文章我们把状态空间模型的框架搭好,状态方程、观测方程都摆出来了,接下来最核心的问题就是——怎么从一堆带噪声的观测里&#xf…

2026/10/17 21:23:32 阅读更多 →
韩语词汇表构建与评测:从词表设计到分词、拼写检查与检索召回

韩语词汇表构建与评测:从词表设计到分词、拼写检查与检索召回

简介:这份韩语词汇表资源面向韩语学习者、语言研究者及需要构建韩语词典数据的开发者,提供从原始词条到结构化词典的完整数据集合。资源包共5个文件,以json词典数据、txt单词列表和md说明文档为主,压缩包约28.37MB,jso…

2026/10/17 21:22:31 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →