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/8/2 16:56:52 阅读更多 →
深入解析CPU指令流水线:从5级模型到现代优化实战

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

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

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

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

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

2026/8/2 16:56:52 阅读更多 →

最新新闻

基于DenseNet-201与BiLSTM融合的阿尔茨海默病多模态影像智能诊断系统

基于DenseNet-201与BiLSTM融合的阿尔茨海默病多模态影像智能诊断系统

摘要:针对阿尔茨海默病(AD)早期诊断准确率不足的问题,本研究提出了一种基于深度学习的多模型融合智能诊断系统。 项目概览 项目简介 该系统采用DenseNet-201卷积神经网络提取医学影像的深层特征,结合双向长短时记忆网…

2026/8/2 17:39:20 阅读更多 →
3步实现英雄联盟内存换肤:R3nzSkin开源工具完整指南

3步实现英雄联盟内存换肤:R3nzSkin开源工具完整指南

3步实现英雄联盟内存换肤:R3nzSkin开源工具完整指南 【免费下载链接】R3nzSkin Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3n/R3nzSkin R3nzSkin是一款专为英雄联盟(LoL)设计的开源内存级换肤工具,它…

2026/8/2 17:39:20 阅读更多 →
AI模型发布策略解析:从安全审查到开发者应对

AI模型发布策略解析:从安全审查到开发者应对

1. 项目概述:一次关于AI模型发布策略的深度观察最近,关于OpenAI发布策略的讨论在技术社区里又掀起了一波小高潮。一个颇具戏剧性的标题——“奥特曼撒谎?OpenAI 5.6突发反转,发布无需批准!”——吸引了不少眼球。作为一…

2026/8/2 17:39:20 阅读更多 →
OpCore-Simplify黑苹果配置:10分钟完成专业级EFI的终极指南

OpCore-Simplify黑苹果配置:10分钟完成专业级EFI的终极指南

OpCore-Simplify黑苹果配置:10分钟完成专业级EFI的终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的黑苹果配置而烦恼…

2026/8/2 17:39:20 阅读更多 →
ESP32摄像头视频流服务器实战:基于XIAO与OV2640的MJPEG实现

ESP32摄像头视频流服务器实战:基于XIAO与OV2640的MJPEG实现

1. 项目缘起:为什么要把摄像头“挂”到网上?最近在折腾一个智能家居的监控项目,核心需求很简单:我想把一块小巧的Seeed Studio XIAO开发板(我用的是ESP32S3 Sense版本,因为它自带摄像头接口)变成…

2026/8/2 17:39:20 阅读更多 →
<h1>潮州高口碑黄金铂金回收白银回收实体老店排行 5 家靠谱门店电话地址全收录</h1> <p>走在潮州街头,黄金铂金白银回收门店鳞次栉比、鱼龙混杂,市民面对琳琅满目的招牌往往难辨真伪。为帮街坊邻

<h1>潮州高口碑黄金铂金回收白银回收实体老店排行 5 家靠谱门店电话地址全收录</h1> <p>走在潮州街头,黄金铂金白银回收门店鳞次栉比、鱼龙混杂,市民面对琳琅满目的招牌往往难辨真伪。为帮街坊邻

郴州街头巷尾,黄金铂金白银回收门店鳞次栉比,招牌林立间难免鱼龙混杂。为帮市民甄选靠谱变现渠道,小编实地走访多家商户,逐一核验资质与口碑,筛选出本地五家优质诚信实体老店。这份清单收录了连锁老牌机构与深耕本土多…

2026/8/2 17:38:19 阅读更多 →

日新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

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

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

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

2026/8/2 0:00:38 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

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

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

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

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →