当前位置: 首页 > 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语言,提升编程技能。

相关文章:

go语言学习 第7章:数组

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

PDF图片和表格等信息提取开源项目

文章目录 综合性工具专门的表格提取工具经典工具 综合性工具 PDF-Extract-Kit - opendatalab开发的综合工具包&#xff0c;包含布局检测、公式检测、公式识别和OCR功能 仓库&#xff1a;opendatalab/PDF-Extract-Kit特点&#xff1a;功能全面&#xff0c;包含表格内容提取的S…...

《Progressive Transformers for End-to-End Sign Language Production》复现报告

摘要 本文复现了《Progressive Transformers for End-to-End Sign Language Production》一文中的核心模型结构。该论文提出了一种端到端的手语生成方法&#xff0c;能够将自然语言文本映射为连续的 3D 骨架序列&#xff0c;并引入 Counter Decoding 实现动态序列长度控制。我…...

Haystack:AI与IoT领域的全能开源框架

一、Haystack 的定义与背景 Haystack 是一个开源框架,主要服务于两类不同领域: 物联网(IoT)与建筑自动化领域(Project Haystack): 旨在标准化物联网设备数据的语义模型,解决建筑系统(如 HVAC、能源管理)的数据互操作性问题,通过标签分类(Tagging Taxonomy)统一设…...

OpenWrt:使用ALSA实现边录边播

ALSA是Linux系统中的高级音频架构&#xff08;Advanced Linux Sound Architecture&#xff09;。目前已经成为了linux的主流音频体系结构&#xff0c;想了解更多的关于ALSA的知识&#xff0c;详见&#xff1a;http://www.alsa-project.org 在内核设备驱动层&#xff0c;ALSA提供…...

​链表题解——回文链表【LeetCode】

算法思路 核心思想&#xff1a; 找到链表的中间节点。反转链表的后半部分。比较链表的前半部分和反转后的后半部分&#xff0c;如果值完全一致&#xff0c;则是回文链表。 具体步骤&#xff1a; 使用快慢指针找到链表的中间节点&#xff08;middleNode 方法&#xff09;。反转…...

CSS6404L 在物联网设备中的应用优势:低功耗高可靠的存储革新与竞品对比

物联网设备对存储芯片的需求聚焦于低功耗、小尺寸、高可靠性与传输效率&#xff0c;Cascadeteq 的 CSS6404L 64Mb Quad-SPI Pseudo-SRAM 凭借差异化技术特性&#xff0c;在同类产品中展现显著优势。以下从核心特性及竞品对比两方面解析其应用价值。 一、CSS6404L 核心产品特性…...

Java Stream 高级实战:并行流、自定义收集器与性能优化

一、并行流深度实战&#xff1a;大规模数据处理的性能突破 1.1 并行流的核心应用场景 在电商用户行为分析场景中&#xff0c;需要对百万级用户日志数据进行实时统计。例如&#xff0c;计算某时段内活跃用户数&#xff08;访问次数≥3次的用户&#xff09;&#xff0c;传统循环…...

计算机视觉——相机标定

计算机视觉——相机标定 一、像素坐标系、图像坐标系、相机坐标系、世界坐标系二、坐标系变换图像坐标系 → 像素坐标系相机坐标系 → 图像坐标系世界坐标系 → 相机坐标系 ⋆ \star ⋆ 世界坐标系 → 像素坐标系 三、相机标定 一、像素坐标系、图像坐标系、相机坐标系、世界坐…...

C语言中的数据类型(二)--结构体

在之前我们已经探讨了C语言中的自定义数据类型和数组&#xff0c;链接如下&#xff1a;C语言中的数据类型&#xff08;上&#xff09;_c语言数据类型-CSDN博客 目录 一、结构体的声明 二、结构体变量的定义和初始化 三、结构体成员的访问 3.1 结构体成员的直接访问 3.2 结…...

第1章:Neo4j简介与图数据库基础

1.1 图数据库概述 在当今数据爆炸的时代&#xff0c;数据不仅仅是以量取胜&#xff0c;更重要的是数据之间的关联关系。传统的关系型数据库在处理高度关联数据时往往力不从心&#xff0c;而图数据库则应运而生&#xff0c;成为处理复杂关联数据的理想选择。 传统关系型数据库…...

C++11:原子操作与内存顺序:从理论到实践的无锁并发实现

文章目录 0.简介1.并发编程需要保证的特性2.原子操作2.1 原子操作的特性 3.内存顺序3.1 顺序一致性3.2 释放-获取&#xff08;Release-Acquire)3.3 宽松顺序&#xff08;Relaxed)3.4 内存顺序 4.无锁并发5. 使用建议 0.简介 在并发编程中&#xff0c;原子性、可见性和有序性是…...

Android第十四次面试总结

OkHttp中获取数据与操作数据 一、数据获取核心机制 1. ​同步请求&#xff08;阻塞式&#xff09;​​ // 1. 创建HTTP客户端&#xff08;全局应复用实例&#xff09; OkHttpClient client new OkHttpClient();// 2. 构建请求对象&#xff08;GET示例&#xff09; Request r…...

动力电池点焊机:驱动电池焊接高效与可靠的核心力量|比斯特自动化

在新能源汽车与储能设备需求激增的背景下&#xff0c;动力电池的制造工艺直接影响产品性能与安全性。作为电芯与极耳连接的核心设备&#xff0c;点焊机如何平衡效率、精度与可靠性&#xff0c;成为电池企业关注的重点。 动力电池点焊机的核心功能是确保电芯与极耳的稳固连接。…...

【MySQL】10.事务管理

1. 事务的引入 首先我们需要知道CURD操作不加控制会产生什么问题&#xff1a; 为了解决上面的问题&#xff0c;CURD需要满足如下条件&#xff1a; 2. 事务的概念 事务就是一组DML语句组成&#xff0c;这些语句在逻辑上存在相关性&#xff0c;这一组DML语句要么全部成功&…...

Bugku-CTF-Web安全最佳刷题路线

曾经的我也是CTF六项全能&#xff0c;Web安全&#xff0c;密码学&#xff0c;杂项&#xff0c;Pwn&#xff0c;逆向&#xff0c;安卓样样都会。明明感觉这样很酷&#xff0c;却为何还是沦为社畜。Bugku-CTF-Web安全最佳刷题路线&#xff0c;我已经整理好了&#xff0c;干就完了…...

IT学习方法与资料分享

一、编程语言与核心技能&#xff1a;构建技术地基 1. 入门首选&#xff1a;Python 与 JavaScript Python&#xff1a;作为 AI 与数据科学的基石&#xff0c;可快速构建数据分析与自动化脚本开发能力。 JavaScript&#xff1a;Web 开发的核心语言&#xff0c;可系统掌握 React/V…...

程序代码篇---Python串口

在 Python 里&#xff0c;serial库&#xff08;一般指pyserial&#xff09;是串口通信的常用工具。下面为你介绍其常用的读取和发送操作函数及使用示例&#xff1a; 1. 初始化串口 要进行串口通信&#xff0c;首先得对串口对象进行初始化&#xff0c;代码如下&#xff1a; i…...

jenkins gerrit-trigger插件配置

插件gerrit-trigger下载好之后要在Manage Jenkins -->Gerrit Trigger-->New Server 中新增Gerrit Servers 配置好保存后点击“状态”查看是否正常...

虚拟主机都有哪些应用场景?

虚拟主机作为一种高效的网络托管方案&#xff0c;已经逐渐成为企业构建网站和应用软件的重要选择&#xff0c;下面&#xff0c;小编将为大家介绍一下虚拟主机的应用场景都有哪些吧&#xff01; 虚拟主机可以帮助企业建立属于自己的企业网站&#xff0c;是用来展示公司形象和服务…...

预训练语言模型T5-11B的简要介绍

文章目录 模型基本信息架构特点性能表现应用场景 T5-11B 是谷歌提出的一种基于 Transformer 架构的预训练语言模型&#xff0c;属于 T5&#xff08;Text-To-Text Transfer Transformer&#xff09;模型系列&#xff0c;来自论文 Colin Raffel, Noam Shazeer, Adam Roberts, Kat…...

数论总结,(模版与题解)

数论 欧拉函数X质数&#xff08;线性筛与二进制枚举&#xff09;求解组合数欧拉降幂&#xff08;乘积幂次&#xff09;乘法逆元最小质因子之和模版 欧拉函数 欧拉函数的定义就是小于等于n的数里有f(n)个数与n互质&#xff0c;下面是求欧拉函数的模版。 package com.js.datas…...

EasyRTC嵌入式音视频通信SDK助力物联网/视频物联网音视频打造全场景应用

一、方案概述​ 随着物联网技术的飞速发展&#xff0c;视频物联网在各行业的应用日益广泛。实时音视频通信技术作为视频物联网的核心支撑&#xff0c;其性能直接影响着系统的交互体验和信息传递效率。EasyRTC作为一款成熟的音视频框架&#xff0c;具备低延迟、高画质、跨平台等…...

1-2 Linux-虚拟机(2025.6.7学习篇- win版本)

1、虚拟机 学习Linux系统&#xff0c;就需要有一个可用的Linux系统。 如何获得&#xff1f;将自己的电脑重装系统为Linux&#xff1f; NoNo。这不现实&#xff0c;因为Linux系统并不适合日常办公使用。 我们需要借助虚拟机来获得可用的Linux系统环境进行学习。 借助虚拟化技术&…...

Deepseek基座:Deepseek-v2核心内容解析

DeepSeek原创文章1 DeepSeek-v3&#xff1a;基于MLA的高效kv缓存压缩与位置编码优化技术 2 Deepseek基座&#xff1a;DeepSeek LLM核心内容解析 3 Deepseek基座&#xff1a;Deepseek MOE核心内容解析 4 Deepseek基座&#xff1a;Deepseek-v2核心内容解析 5Deepseek基座&#xf…...

2025主流智能体Agent终极指南:Manus、OpenManus、MetaGPT、AutoGPT与CrewAI深度横评

当你的手机助手突然提醒"明天会议要带投影仪转接头"&#xff0c;或是电商客服自动生成售后方案时&#xff0c;背后都是**智能体(Agent)**在悄悄打工。这个AI界的"瑞士军刀"具备三大核心特征&#xff1a; 自主决策能力&#xff1a;像老司机一样根据路况实时…...

家政小程序开发——AI+IoT技术融合,打造“智慧家政”新物种

基于用户历史订单&#xff08;如“每周一次保洁”&#xff09;、设备状态&#xff08;如智能门锁记录的清洁频率&#xff09;&#xff0c;自动生成服务计划。 结合天气数据&#xff08;如“雨天推荐玻璃清洁”&#xff09;&#xff0c;动态推送服务套餐。 IoT设备联动&#x…...

Keil开发STM32生成hex文件/bin文件

生成hex文件生成bin文件 STM32工程的hex文件和bin文件都可以通过Keil直接配置生成 生成hex文件 工程中点击魔术棒&#xff0c;在 Output 中勾选 Create HEX File 选项&#xff0c;OK保存工程配置 编译工程通过后可以看到编译输出窗口有创建hex文件的提示 默认可以在Output文…...

Windows 系统安装 Redis 详细教程

Windows 系统安装 Redis 详细教程 一、Redis 简介 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、基于内存的高性能键值存储系统&#xff0c;常被用作数据库、缓存和消息中间件。相比传统数据库&#xff0c;Redis 具有以下优势&#xff1a; 超高性能…...

“组件、路由懒加载”,在 Vue3 和 React 中分别如何实现? (copy)

Vue3 和 React 组件懒加载实现方式 React 中组件懒加载的实现方式 React 提供了 React.lazy 和 Suspense 两个 API 来实现组件的懒加载。React.lazy 用于动态导入组件&#xff0c;而 Suspense 则用于指定加载过程中的占位内容。例如&#xff0c;可以通过以下代码实现懒加载&a…...