news 2026/4/17 15:18:30

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/18 3:32:42

无头浏览器资源占用优化指南

资源优化的必要性 在软件测试领域&#xff0c;无头浏览器&#xff08;如Headless Chrome、Puppeteer或Playwright&#xff09;已成为自动化测试的核心工具&#xff0c;但其资源占用问题常导致测试延迟和成本飙升。数据显示&#xff0c;未优化的无头浏览器实例可占用高达420MB内…

作者头像 李华
网站建设 2026/4/18 3:31:20

测试用例智能排序执行算法:提升软件测试效能的智能引擎

在敏捷开发和持续集成&#xff08;CI/CD&#xff09;日益普及的背景下&#xff0c;软件测试从业者面临测试用例数量激增、执行效率低下的挑战。传统随机或固定顺序的测试方法常导致资源浪费和缺陷漏检。智能排序执行算法通过动态优先级调整&#xff0c;优化测试流程&#xff0c…

作者头像 李华
网站建设 2026/4/18 3:33:41

中兴 F50 随身 WiFi+UFI-TOOLS,加载了cpolar远程管理竟这么简单

UFI-TOOLS 是针对中兴 F50 随身 WiFi 开发的开源工具&#xff0c;核心功能覆盖设备状态监控&#xff08;信号强度、温度、CPU 占用等&#xff09;、网络优化&#xff08;锁频段、锁小区&#xff09;、设备操控&#xff08;指示灯、性能模式切换&#xff09;等&#xff0c;还能实…

作者头像 李华
网站建设 2026/4/18 3:36:14

node中医孕妇产后护理系统 微信小程序

目录 系统概述核心功能技术特点应用价值 项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 系统概述 中医孕妇产后护理系统是一款基于微信小程序的健康管理工具&#xff0c;旨在结合传统中医理论&#xff0…

作者头像 李华
网站建设 2026/4/17 16:01:13

大白话讲透2026最火算力黑科技:量子云到底是什么?

2026年的科技圈&#xff0c;“量子云”绝对是高频热词。打开科技新闻&#xff0c;满屏都是“量子算力普惠”“混合算力网络”&#xff1b;企业圈里&#xff0c;从金融巨头到制药公司都在谈“量子云转型”。但这东西到底是什么&#xff1f;是不是又一个听起来高深、实则离生活很…

作者头像 李华
网站建设 2026/4/18 3:51:43

基于Spring Boot的驾校管理系统的设计与实现(任务书)

本科毕业论文(设计)任务书 学院:数学与数据科学学院 学生姓名 专业班级 信息与计算科学211 学号 校内指导教师姓名 职称/职务 副教授 签名 校外指导教师姓名 职称/职务 技术经理 签名 论文题目 基于Spring Boot的驾校管理系统的设计与实现 起始日期 2024-9 ~ 2025-5 一、…

作者头像 李华