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

go语言学习 第7章:数组

第7章:数组

数组是一种基本的数据结构,用于存储相同类型的元素集合。在Go语言中,数组的大小是固定的,一旦定义,其长度不可改变。本章将详细介绍Go语言中数组的定义、初始化、访问、遍历以及一些常见的操作。

一、数组的定义与初始化

(一)定义数组

在Go语言中,数组的定义格式如下:

var 数组名 [数组大小]数据类型
  • 数组大小:数组中元素的数量,必须是一个常量。
  • 数据类型:数组中所有元素的数据类型。

例如,定义一个包含5个整数的数组:

var scores [5]int

(二)初始化数组

数组可以在定义时进行初始化,也可以在定义后单独赋值。

1. 定义时初始化
var scores [5]int = [5]int{95, 91, 39, 60, 21}

或者更简洁地:

var scores = [5]int{95, 91, 39, 60, 21}
2. 定义后初始化
var scores [5]int
scores[0] = 95
scores[1] = 91
scores[2] = 39
scores[3] = 60
scores[4] = 21

(三)省略数组大小

如果在定义数组时已经提供了初始值,可以省略数组的大小,让编译器自动推断:

var scores = [...]int{95, 91, 39, 60, 21}

二、数组的访问与修改

(一)访问数组元素

通过索引来访问数组中的元素,索引从0开始。例如:

package mainimport "fmt"func main() {var scores = [5]int{95, 91, 39, 60, 21}fmt.Println("第一个元素:", scores[0])fmt.Println("第二个元素:", scores[1])
}

(二)修改数组元素

同样通过索引来修改数组中的元素。例如:

package mainimport "fmt"func main() {var scores = [5]int{95, 91, 39, 60, 21}scores[2] = 88 // 修改第三个元素fmt.Println("修改后的数组:", scores)
}

三、数组的遍历

(一)使用for循环遍历

可以使用普通的for循环来遍历数组。例如:

package mainimport "fmt"func main() {var scores = [5]int{95, 91, 39, 60, 21}for i := 0; i < len(scores); i++ {fmt.Println("索引", i, "的值为:", scores[i])}
}

(二)使用for-range循环遍历

for-range循环是Go语言中特有的一种迭代结构,可以更简洁地遍历数组。例如:

package mainimport "fmt"func main() {var scores = [5]int{95, 91, 39, 60, 21}for index, value := range scores {fmt.Println("索引", index, "的值为:", value)}
}

四、数组的长度

可以使用内置函数len来获取数组的长度。例如:

package mainimport "fmt"func main() {var scores = [5]int{95, 91, 39, 60, 21}fmt.Println("数组的长度为:", len(scores))
}

五、多维数组

(一)定义多维数组

多维数组是数组的数组。例如,定义一个2维数组:

var matrix [3][3]int

(二)初始化多维数组

var matrix = [3][3]int{{1, 2, 3},{4, 5, 6},{7, 8, 9},
}

(三)访问与修改多维数组

package mainimport "fmt"func main() {var matrix = [3][3]int{{1, 2, 3},{4, 5, 6},{7, 8, 9},}fmt.Println("第一个元素:", matrix[0][0])matrix[1][1] = 100 // 修改第二行第二列的值fmt.Println("修改后的数组:", matrix)
}

(四)遍历多维数组

package mainimport "fmt"func main() {var matrix = [3][3]int{{1, 2, 3},{4, 5, 6},{7, 8, 9},}for i := 0; i < len(matrix); i++ {for j := 0; j < len(matrix[i]); j++ {fmt.Println("matrix[", i, "][", j, "] = ", matrix[i][j])}}
}

六、数组的内存分析

数组是值类型,存储在栈上。数组的每个元素占用的字节数取决于其数据类型。例如,int类型在64位系统上通常占用8字节,因此一个[5]int数组占用40字节。

七、数组的优缺点

(一)优点

  • 访问速度快:数组的索引访问非常快,时间复杂度为O(1)。
  • 内存连续:数组的元素在内存中是连续存储的,这有助于提高缓存命中率。

(二)缺点

  • 大小固定:数组的大小在定义后不能改变。
  • 灵活性差:数组的大小必须在编译时确定,不能动态调整。

八、总结

本章详细介绍了Go语言中数组的定义、初始化、访问、遍历以及一些常见的操作。数组是一种基本的数据结构,适用于存储固定大小的相同类型元素集合。通过合理使用数组,可以实现高效的元素访问和操作。

在实际开发中,数组的固定大小可能会限制其使用场景。在需要动态调整大小的情况下,可以使用切片(将在第8章详细介绍)。数组和切片在Go语言中都是非常重要的数据结构,掌握它们的使用方法对于编写高效、可读性强的代码至关重要。

在接下来的章节中,我们将继续深入学习Go语言的其他特性,如切片、映射等。希望读者能够通过这些内容更好地掌握Go语言,提升编程技能。

http://www.lryc.cn/news/2404502.html

相关文章:

  • PDF图片和表格等信息提取开源项目
  • 《Progressive Transformers for End-to-End Sign Language Production》复现报告
  • Haystack:AI与IoT领域的全能开源框架
  • OpenWrt:使用ALSA实现边录边播
  • ​链表题解——回文链表【LeetCode】
  • CSS6404L 在物联网设备中的应用优势:低功耗高可靠的存储革新与竞品对比
  • Java Stream 高级实战:并行流、自定义收集器与性能优化
  • 计算机视觉——相机标定
  • C语言中的数据类型(二)--结构体
  • 第1章:Neo4j简介与图数据库基础
  • C++11:原子操作与内存顺序:从理论到实践的无锁并发实现
  • Android第十四次面试总结
  • 动力电池点焊机:驱动电池焊接高效与可靠的核心力量|比斯特自动化
  • 【MySQL】10.事务管理
  • Bugku-CTF-Web安全最佳刷题路线
  • IT学习方法与资料分享
  • 程序代码篇---Python串口
  • jenkins gerrit-trigger插件配置
  • 虚拟主机都有哪些应用场景?
  • 预训练语言模型T5-11B的简要介绍
  • 数论总结,(模版与题解)
  • EasyRTC嵌入式音视频通信SDK助力物联网/视频物联网音视频打造全场景应用
  • 1-2 Linux-虚拟机(2025.6.7学习篇- win版本)
  • Deepseek基座:Deepseek-v2核心内容解析
  • 2025主流智能体Agent终极指南:Manus、OpenManus、MetaGPT、AutoGPT与CrewAI深度横评
  • 家政小程序开发——AI+IoT技术融合,打造“智慧家政”新物种
  • Keil开发STM32生成hex文件/bin文件
  • Windows 系统安装 Redis 详细教程
  • “组件、路由懒加载”,在 Vue3 和 React 中分别如何实现? (copy)
  • .NET 事件模式举例介绍