news 2026/4/15 15:02:39

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 5:05:32

nodejs飞鸽旅游服务管理系统

目录飞鸽旅游服务管理系统简介系统核心功能技术架构特点应用场景与优势项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作飞鸽旅游服务管理系统简介 飞鸽旅游服务管理系统是基于Node.js开发的旅游行业解决方…

作者头像 李华
网站建设 2026/4/10 17:12:51

179页满分PPT | 某大型车企数字化工厂规划蓝图设计方案

大部分车企造新车时&#xff0c;工艺、计划、生产、物流、采购、质量六条线各跑各的&#xff0c;数据靠纸&#xff0c;设备靠喊&#xff0c;换车型要改一堆表&#xff0c;换物料要录一堆单&#xff0c;问题出了找不到根因&#xff0c;交付慢了找不到堵点&#xff0c;成本高了找…

作者头像 李华
网站建设 2026/4/15 7:58:05

杰理之GPIO【篇】

状态说明 • 方向&#xff1a;有输入&#xff0c;有输出&#xff0c;无开漏。 • 上下拉&#xff1a;所有IO都有上下拉, 电阻固定, 但不同芯片, 或不同引脚的阻值是有差异的, 具体看芯片的规格书。输入状态才有上下拉。 • 水平&#xff1a;输出高(电压接近于VDDIO电压)&#x…

作者头像 李华
网站建设 2026/4/11 5:00:06

UTF-8 编码的二进制字节序列的庖丁解牛

UTF-8 编码的二进制字节序列 是 Unicode 码点到字节流的可变长度编码方案&#xff0c;其核心在于 用前缀标记字节数&#xff0c;用后续字节承载数据&#xff0c;实现 ASCII 兼容与全球字符支持的统一。一、核心原理&#xff1a;可变长度编码规则 ▶ 1. UTF-8 编码模板&#xff…

作者头像 李华