【Go语言基础【15】】数组:固定长度的连续存储结构

发布时间:2026/11/3 1:24:48

【Go语言基础【15】】数组:固定长度的连续存储结构 文章目录零、概述一、数组基础1、数组的本质固定长度的连续存储结构2、声明与初始化3、访问与修改元素二、数组拷贝与传参1、 值拷贝特性2、指针数组的拷贝3、函数传参值传递三、数组遍历四、多维数组五、数组与切片的区别零、概述数组核心语法速查表操作语法示例说明声明数组var arr [5]int长度5元素默认0初始化数组arr : [3]string{a, b, c}完整初始化自动推断长度arr : [...]int{1, 2, 3}长度为3指定索引初始化arr : [4]int{0: 1, 2: 3}索引0→1索引2→3其余为0访问元素value : arr[2]索引从0开始遍历数组for i, v : range arr { ... }使用for range多维数组var matrix [2][3]float64二维数组2行3列适用场景需要固定长度的数据集合如存储月份天数、矩阵数据。性能敏感场景连续内存结构适合缓存优化访问速度快于切片。值语义需求需要确保数据拷贝时的独立性如游戏棋盘状态。注意事项越界检查访问超出索引范围的元素会触发panic需通过len(arr)判断边界。大数组性能拷贝大数组时性能较低建议使用切片或指针传递。类型一致性数组长度和元素类型必须完全匹配才能赋值或比较。一、数组基础1、数组的本质固定长度的连续存储结构Go语言中的数组是值类型具有以下核心特性固定长度声明时必须指定长度运行时不可增减长度是类型的一部分如[5]int和[6]int是不同类型。连续内存元素在内存中连续存放支持高效的索引访问时间复杂度O(1)。类型统一所有元素类型相同可存储内置类型如int、string或自定义类型如结构体。内存结构示例arr:[4]int{3,1,4,1}// 长度为4的int数组索引从0开始每个元素占4字节int在32位系统占4字节。内存地址连续可通过arr[i]直接访问第i个元素。2、声明与初始化** 基本声明语法**var数组名[长度]类型// 未初始化元素为类型零值varscores[5]float64// 长度5的float64数组默认值全为0varnames[3]string// 默认值全为空字符串初始化方式1完整初始化arr:[长度]类型{值1,值2,...}// 显式指定所有元素primes:[3]int{2,3,5}// 长度3元素为2、3、52自动推断长度...arr:[...]类型{值1,值2,...}// 长度由初始化值个数决定fruits:[...]string{apple,banana,orange}// 长度33指定索引初始化arr:[长度]类型{索引:值,索引:值,...}// 仅初始化指定索引的元素points:[4]int{0:10,3:20}// 索引0→10索引3→20其余为0// 数组为[10, 0, 0, 20]3、访问与修改元素索引访问语法数组名[索引]索引范围[0, 长度-1]越界会触发运行时panic。arr:[3]int{1,2,3}fmt.Println(arr[0])// 输出1arr[1]4// 修改索引1的元素为4指针数组定义元素为指针的数组用于存储多个地址。varptrs[2]*int// 长度2的int指针数组a,b:10,20ptrs[0],ptrs[1]a,b// 存储变量地址fmt.Println(*ptrs[0])// 输出10二、数组拷贝与传参1、 值拷贝特性数组是值类型赋值或传参时会完整拷贝所有元素包括指针数组中的指针值但不拷贝指针指向的数据。arr1:[2]int{1,2}arr2:arr1// 拷贝arr1的元素到arr2arr1[0]100// 修改arr1不影响arr2fmt.Println(arr2[0])// 输出1原拷贝值2、指针数组的拷贝拷贝的是指针值地址若多个指针指向同一数据修改会同步。示例str:helloptrArr1:[1]*string{str}ptrArr2:ptrArr1// 拷贝指针值均指向str*ptrArr1[0]world// 修改strptrArr2同步变化fmt.Println(*ptrArr2[0])// 输出world3、函数传参值传递传递数组时函数接收的是原数组的副本修改副本不影响原始数组。示例funcmodify(arr[3]int){arr[0]100// 修改副本}funcmain(){arr:[3]int{1,2,3}modify(arr)// 传递副本fmt.Println(arr[0])// 输出1原始数组未改变}三、数组遍历for循环遍历arr:[3]string{a,b,c}fori:0;ilen(arr);i{fmt.Printf(索引%d: %s\n,i,arr[i])}for range遍历arr:[3]int{10,20,30}forindex,value:rangearr{fmt.Printf(索引%d: 值%d\n,index,value)}// 输出// 索引0: 值10// 索引1: 值20// 索引2: 值30四、多维数组二维数组// 声明[外层长度][内层长度]类型matrix:[2][3]int{{1,2,3},{4,5,6}}// 2行3列访问元素matrix[行索引][列索引]fmt.Println(matrix[0][2])// 输出3第1行第3列三维数组cube:[2][2][2]int{{{1,2},{3,4}},{{5,6},{7,8}},}五、数组与切片的区别特性数组Array切片Slice长度固定声明时确定动态可扩容类型包含长度如[5]int不包含长度如[]int内存分配连续内存固定大小底层依赖数组可动态扩展传参值传递拷贝所有元素引用传递仅拷贝切片头信息注意切片是数组的“视图”通过arr[:]可将数组转换为切片。
延伸阅读

更多相关文章

2026/11/3 1:24:48

【Go语言基础【13】】函数、闭包、方法

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

2026/11/3 1:24:48

【Go语言基础【12】】指针:声明、取地址、解引用

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

2026/11/3 1:24:48

【Go语言基础【14】】defer与异常处理(panic、recover)

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

2026/11/3 2:24:51

folia-major 安装与首次跑通指南:30 分钟点亮全屏歌词动画

folia-major 安装与首次跑通指南:30 分钟点亮全屏歌词动画 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major Folia(仓库名…

2026/11/3 2:24:51

5分钟装好网盘直链下载助手:8大网盘直链解析一步到位

5分钟装好网盘直链下载助手:8大网盘直链解析一步到位 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…

2026/11/3 2:19:51

理解 GC Roots:对象为什么不能被回收

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

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

2026/11/3 1:04:48

STM32实战:基于MAX14431数字隔离器的SPI隔离通信方案

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

2026/11/3 1:04:48

工业SPI隔离通信设计:MAX14431BAEE+与STM32L4A6RG实战

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

2026/11/3 1:04:48

STM32+NRF24L01无线抢答器:硬件设计、通信协议与低功耗实现

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

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑