当前位置: 首页 > news >正文

HoRain云--Go语言数组详解:从入门到精通

🎬 HoRain云小助手:个人主页

🔥 个人专栏: 《Linux 系列教程》《c语言教程》

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

Go 语言数组详解

1. 数组的基本概念

2. 数组的声明方式

基本声明

声明并初始化

3. 访问和修改数组元素

4. 遍历数组

使用传统 for 循环

使用 range 关键字(推荐)

5. 数组的特性

值类型特性

数组比较

6. 多维数组

声明和初始化

7. 数组与切片的区别

数组转切片

8. 实际应用示例

计算平均成绩

存储一周温度数据

9. 注意事项与最佳实践

10. 何时使用数组?


Go 语言数组详解

Go 语言中的数组是一种固定长度的、存储相同类型元素的序列数据结构。数组在内存中是连续分配的,通过索引可以高效访问和修改元素。

1. 数组的基本概念

2. 数组的声明方式

基本声明

var arr [5]int // 声明长度为5的int数组,元素初始化为0 var names [3]string // 声明长度为3的string数组,元素初始化为空字符串

声明并初始化

// 指定长度初始化 arr := [5]int{1, 2, 3, 4, 5} // 使用省略号自动推断长度 arr := [...]int{1, 2, 3, 4, 5} // 编译器自动推断长度为5 // 指定索引初始化 arr := [5]int{0: 10, 2: 30, 4: 50} // 未指定索引的元素为0 // 结果: [10 0 30 0 50]

3. 访问和修改数组元素

arr := [5]int{1, 2, 3, 4, 5} // 访问元素 fmt.Println(arr[0]) // 输出: 1 fmt.Println(arr[4]) // 输出: 5 // 修改元素 arr[2] = 100 fmt.Println(arr) // 输出: [1 2 100 4 5] // 获取数组长度 length := len(arr) // length = 5

⚠️注意:访问超出范围的索引会引发运行时 panic

4. 遍历数组

使用传统 for 循环

for i := 0; i < len(arr); i++ { fmt.Printf("索引 %d: 值 %d\n", i, arr[i]) }

使用 range 关键字(推荐)

// 同时获取索引和值 for index, value := range arr { fmt.Printf("索引 %d: 值 %d\n", index, value) } // 只获取值(忽略索引) for _, value := range arr { fmt.Println(value) } // 只获取索引(忽略值) for index := range arr { fmt.Println(index) }

5. 数组的特性

值类型特性

arr1 := [3]int{1, 2, 3} arr2 := arr1 // 复制整个数组 arr2[0] = 100 fmt.Println(arr1) // [1 2 3] - 原数组未改变 fmt.Println(arr2) // [100 2 3]

数组比较

arr1 := [3]int{1, 2, 3} arr2 := [3]int{1, 2, 3} arr3 := [4]int{1, 2, 3, 4} fmt.Println(arr1 == arr2) // true - 长度和类型相同 // fmt.Println(arr1 == arr3) // 编译错误 - 类型不同

6. 多维数组

声明和初始化

// 声明3行4列的二维数组 var matrix [3][4]int // 初始化 matrix := [3][4]int{ {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, } // 访问元素 fmt.Println(matrix[1][2]) // 输出: 7 // 遍历二维数组 for i := 0; i < len(matrix); i++ { for j := 0; j < len(matrix[i]); j++ { fmt.Printf("%d ", matrix[i][j]) } fmt.Println() }

7. 数组与切片的区别

特性数组切片
长度固定,定义后不可变动态,可扩容
类型值类型(复制整个数组)引用类型(底层指向数组)
内存声明时分配固定内存动态分配,可增长
灵活性
性能访问速度快(连续内存)稍慢(有额外开销)
使用场景长度固定、性能敏感大多数日常开发场景

数组转切片

arr := [5]int{1, 2, 3, 4, 5} slice := arr[:] // 创建包含arr所有元素的切片

8. 实际应用示例

计算平均成绩

package main import "fmt" func main() { scores := [5]float64{88.5, 76.0, 90.5, 69.0, 95.0} var total float64 for _, score := range scores { total += score } average := total / float64(len(scores)) fmt.Printf("平均成绩: %.2f\n", average) }

存储一周温度数据

package main import "fmt" func main() { temperatures := [7]float64{32.0, 31.5, 33.2, 34.0, 35.1, 36.5, 37.0} for i, temp := range temperatures { fmt.Printf("第 %d 天: %.1f°C\n", i+1, temp) } }

9. 注意事项与最佳实践

  1. 长度固定:数组长度是类型的一部分,不同长度的数组是不同类型
  2. 值类型陷阱:在函数中修改数组参数不会影响原数组(因为是副本)
  3. 内存效率:小数组适合值传递,大数组建议使用切片或指针
  4. 越界检查:访问越界索引会导致运行时 panic
  5. 优先使用切片:除非明确需要固定长度,否则优先使用切片
  6. 初始化默认值:未显式初始化的元素会被设置为类型的零值(int为0,string为空字符串等)

10. 何时使用数组?

适合使用数组的场景

不适合使用数组的场景


掌握 Go 语言数组的基础知识,结合切片的灵活特性,可以帮助你根据实际需求选择最合适的数据结构,编写高效、可靠的 Go 程序。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

http://www.jsqmd.com/news/307098/

相关文章:

  • 【E3S出版 | CNKI检索】第二届能源工程与污染治理国际学术会议(EEPC 2026)
  • 2026年靠谱的安徽活动公司/安徽庆典活动公司年度推荐榜
  • Kubernetes+Etcd----集群安装(etcd证书100年) - 教程
  • 人生意义 = 当下体验?
  • 2026年比较好的无锡H5响应式网站制作/无锡网站设计权威推荐榜
  • 剑指offer-68、调整数组顺序使奇数位于偶数前⾯(⼆)
  • 2026 出国英语封闭雅思零基础培训班学校口碑榜单:深度测评高性价比提分机构推荐
  • 2026 出国雅思学习教育机构口碑推荐排行榜:权威雅思培训辅导机构 TOP 榜单
  • 2026年行业内知名的企业独栋买卖推荐排行,园区/企业独栋/办公场地,企业独栋买卖推荐排行
  • 量化交易(二)系统环境的配置
  • 从品牌到价格:微波反应器全面选购攻略,供应商与生产商推荐
  • FHQ-Treap 树 ← 洛谷P3369、AcWing253
  • 2026年知名的合肥考驾照理论培训/合肥考驾照培训综合口碑榜
  • 2026年比较好的合肥驾校场地/合肥驾校学车服务优选榜
  • 自动化测试代码覆盖率提升实战指南
  • 构建高效测试基石:模块化测试框架设计原则与实践探析
  • 测试数据自动生成与注入技术:赋能软件测试的高效实践
  • 并行测试执行资源调度策略研究与应用
  • AI元素定位技术实战:Testim与Virtuoso在测试中的应用指南
  • 无头浏览器资源占用优化指南
  • 2026年口碑好的兰精莫代尔砂洗空气层/兰精人棉砂洗空气层高性价比推荐
  • 网格交易者应对上涨的对策思考
  • 2026年口碑好的防水染色纱线/汽车内饰染色纱线厂家实力与用户口碑参考
  • 2026年口碑好的纱线加捻/产业用纱线加捻厂家选择参考建议
  • 中兴 F50 随身 WiFi+UFI-TOOLS,加载了cpolar远程管理竟这么简单
  • 建站零基础入门:手把手教你如何自助建站
  • 拒绝 OOM:Apache Fesod 高性能 Excel 处理架构全景解析
  • 2026年评价高的芳纶加捻厂家推荐与选择指南
  • 手把手教你用 Bash 脚本自动更新 /etc/hosts —— 自动绑定网卡 IP 与节点名
  • 2026年车间洗地机厂家推荐:物业洗地机/工厂洗地机/商场超市洗地机/学校手推式洗地机/展厅手推式洗地机厂家精选