【Go 基础篇】Go语言中的数组:初识与应用

Go语言以其简洁、高效和强大的特性在编程界广受欢迎。数组作为一种基本的数据结构,在各种应用场景中扮演着重要角色。本文将引入Go语言中的数组,介绍其特点、创建、初始化以及基本应用,为你打开数组的大门。
前言
数组是一种固定大小的数据结构,用于存储一系列相同类型的元素。与切片(Slice)不同,数组的大小在创建时就已经确定,无法进行动态调整。数组在编程中广泛应用,从简单的数据存储到复杂的算法和数据处理,都有其身影。
数组的基本特点
固定大小
数组在定义时需要指定固定的大小,这一特点使得数组在存储时占据连续的内存空间,从而能够快速访问元素。
相同数据类型
数组中的元素必须是相同的数据类型,这有助于保持内存布局的一致性,使得元素的存储更加紧凑。
零值初始化
如果在创建数组时未显式指定元素的初始值,那么数组的元素将会被自动初始化为对应类型的零值。例如,整数类型的数组元素会被初始化为0,字符串类型的数组元素会被初始化为空字符串。
数组的创建与初始化
在Go语言中,可以通过以下方式创建和初始化数组。
方式一:指定大小并初始化
package mainimport "fmt"func main() {var numbers [5]int // 声明一个长度为5的int类型数组numbers[0] = 10 // 为第一个元素赋值numbers[1] = 20 // 为第二个元素赋值// ...fmt.Println(numbers) // 输出数组
}
方式二:使用初始化列表
package mainimport "fmt"func main() {numbers := [5]int{10, 20, 30, 40, 50} // 使用初始化列表初始化数组fmt.Println(numbers) // 输出数组
}
方式三:自动推断数组大小
package mainimport "fmt"func main() {numbers := [...]int{10, 20, 30, 40, 50} // 自动推断数组大小fmt.Println(numbers) // 输出数组
}
数组的访问与遍历
通过索引访问元素
通过数组的索引可以访问到对应位置的元素。索引从0开始,以数组长度减1结束。
package mainimport "fmt"func main() {numbers := [5]int{10, 20, 30, 40, 50}fmt.Println("第一个元素:", numbers[0]) // 输出第一个元素fmt.Println("第三个元素:", numbers[2]) // 输出第三个元素fmt.Println("最后一个元素:", numbers[4]) // 输出最后一个元素
}
通过for循环遍历数组
通过for循环可以遍历数组中的所有元素。
package mainimport "fmt"func main() {numbers := [5]int{10, 20, 30, 40, 50}for i := 0; i < len(numbers); i++ {fmt.Println(numbers[i])}
}
使用range遍历数组
使用range关键字可以更方便地遍历数组。
package mainimport "fmt"func main() {numbers := [5]int{10, 20, 30, 40, 50}for _, value := range numbers {fmt.Println(value)}
}
数组的应用
作为函数参数
数组可以作为函数的参数传递。需要注意的是,数组在参数传递时会被复制一份,所以函数内部对数组的修改不会影响到原始数组。
package mainimport "fmt"func modifyArray(arr [5]int) {arr[0] = 100
}func main() {numbers := [5]int{10, 20, 30, 40, 50}modifyArray(numbers)fmt.Println(numbers) // 输出 [10 20 30 40 50]
}
多维数组
Go语言支持多维数组,可以通过嵌套的数组创建多维数组。
package mainimport "fmt"func main() {var matrix [3][3]intfor i := 0; i < 3; i++ {for j := 0; j < 3; j++ {matrix[i][j] = i + j}}fmt.Println(matrix)
}
数组与切片的比较
数组和切片是Go语言中的两种不同的数据结构,它们有着不同的特点和用途。
数组
- 大小固定,创建时需要指定大小。
- 传递给函数时会复制整个数组。
- 可以作为多维数组的基础。
切片
- 动态大小,支持动态扩展和缩减。
- 传递给函数时传递的是底层数据的引用。
- 支持各种操作,如追加、删除、切割等。
总结
数组作为一种基本的数据结构,在Go语言中扮演着重要的角色。通过掌握数组的创建、初始化、访问和遍历,你可以在开发中更加灵活地处理数据集合。尽管数组的大小固定,但其在一些场景中仍然非常有用,如存储已知大小的数据集合或构建多维数组。当你需要更灵活地管理数据大小和操作时,切片是更好的选择。
在实际开发中,你可能会经常使用数组来存储和处理数据。了解数组的基本特点、创建方式以及遍历方式,可以帮助你更好地理解和应用这一重要的数据结构。当然,还要注意数组的固定大小和数据类型的限制,以及在函数传参时数组复制的特点。
同时,数组与切片的比较也是非常重要的。切片作为更灵活的数据结构,可以用来处理动态大小的数据集合。在某些情况下,你可能会在数组和切片之间权衡选择,根据实际需求来决定使用哪种数据结构。
通过实践和实际应用,你将能够更好地理解和掌握数组的使用方法,从而在日常开发中更加自如地处理数据集合。无论是处理小规模的数据还是构建复杂的算法,数组都是你编程工具箱中不可或缺的一部分。通过不断学习和实践,你将能够在Go语言中充分发挥数组的优势,为你的程序增添更多的可能性。
相关文章:
【Go 基础篇】Go语言中的数组:初识与应用
Go语言以其简洁、高效和强大的特性在编程界广受欢迎。数组作为一种基本的数据结构,在各种应用场景中扮演着重要角色。本文将引入Go语言中的数组,介绍其特点、创建、初始化以及基本应用,为你打开数组的大门。 前言 数组是一种固定大小的数据…...
(vue)el-table 怎么把表格列中相同的数据 合并为一行
(vue)el-table 怎么把表格列中相同的数据 合并为一行 效果: 文档解释: 写法: <el-table:data"tableData"size"mini"class"table-class"borderstyle"width:100%"max-height"760":span-…...
精准高效农业作业,植保无人机显身手
中国作为农业大国,拥有约18亿亩的农田,每年都需要进行种子喷洒和农药施用等农业作业,对于普通农户来说,这是一项耗时耗力的工程,同时,人工喷洒农药极易造成农药慢性中毒,对农民的身体健康产生极…...
大集合拆分成多个小集合
文章目录 1. 场景2. 拆分集合方法(写了三种)3. 格式化打印方法 1. 场景 在数据库批量操作时,有可能数据量过大,不能一次性操作,所以需要将大集合拆分为多个小集合进行多次操作 2. 拆分集合方法(写了三种&…...
linux————LVS集群
目录 一、集群概述 一、负载均衡技术类型 二、负载均衡实现方式 二、LVS结构 一、三层结构 二、架构对象 三、LVS工作模式 四、负载均衡算法 一、静态负载均衡 二、动态负载 五、ipvsadm命令详解 六、LVS配置 一、基础配置 二、实现NAT模型搭建 配置IP地址 安装…...
软考高级系统架构设计师系列论文七十一:论行业应用软件系统的开发规划
软考高级系统架构设计师系列论文七十一:论行业应用软件系统的开发规划 一、软件系统相关知识二、摘要三、正文四、总结一、软件系统相关知识 软考高级系统架构设计师系列之:系统开发基础知识...
vue2 自定义指令,插槽
一、学习目标 1.自定义指令 基本语法(全局、局部注册)指令的值v-loading的指令封装 2.插槽 默认插槽具名插槽作用域插槽 二、自定义指令 1.指令介绍 内置指令:v-html、v-if、v-bind、v-on… 这都是Vue给咱们内置的一些指令,…...
oracle超详细语法和备份工具
oracle基础语法 在 Oracle 开发中,客户端把 SQL 语句发送给服务器,服务器对 SQL 语句进行编译、执行,把执行的结果返回给客户端。常用的SQL语句大致可以分为五类:数据定义语言(DDL),包括 CREAT…...
Redis的持久化机制是什么?各自的优缺点?
Redis拥有两种持久化机制:RDB(Redis Database)和AOF(Append-Only File)。 1.RDB(Redis Database)持久化机制 RDB是Redis的默认持久化方式,它通过将Redis在某个时间点的数据状态保存到磁盘上的二进制文件中。该文件是一个快照(snapshot),包含…...
机器学习:什么是分类/回归/聚类/降维/决策
目录 学习模式分为三大类:监督,无监督,强化学习 监督学习基本问题 分类问题 回归问题 无监督学习基本问题 聚类问题 降维问题 强化学习基本问题 决策问题 如何选择合适的算法 我们将涵盖目前「五大」最常见机器学习任务:…...
算法通关村第5关【白银】| 哈希和栈经典算法题
1.两个栈实现队列 思路:两个栈,一个输入栈,一个输出栈。 当需要输入的时候就往inStack中插入,需要输出就往outStack中输出,当输出栈是空就倒出输入栈的数据到输出栈中,这样就保证了后插入的数据从栈顶倒入…...
CrystalNet .Net VCL for Delphi Crack
CrystalNet .Net VCL for Delphi Crack VCL或更为人所知的可视化组件库是基于一个面向对象的框架,什么是用户对开发人员和事件的Microsoft Windows应用程序的接口。可视化组件库是用对象Pascal编写的。它主要是为使用Borland而开发的,它具有与Delphi以及…...
云计算在线实训系统建设方案
一、 人工智能与云计算系统概述 人工智能(Artificial Intelligence,简称AI)是一种模拟人类智能的科学和工程,通过使用计算机系统来模拟、扩展和增强人类的智能能力。人工智能涉及多个领域,包括机器学习、深度学习、自然…...
C++ 珠心算测验
珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练, 既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。 某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整…...
prometheus+cadvisor监控docker容器
一、安装cadvisor docker pull google/cadvisor:latest二、运行容器 docker run -d \--volume/:/rootfs:ro \--volume/var/run:/var/run:rw \--volume/sys:/sys:ro \--volume/var/lib/docker/:/var/lib/docker:ro \--publish8088:8080 \--detachtrue \--namecadvisor \--priv…...
13、Vue3 大事件管理系统
一、大事件项目介绍 和 创建 1.1 Vue3 大事件管理系统 在线演示: https://fe-bigevent-web.itheima.net/login 接口文档: https://apifox.com/apidoc/shared-26c67aee-0233-4d23-aab7-08448fdf95ff/api-93850835 基地址: http://big-event-vue-api-t.i…...
Redis三种特殊数据类型
Redis三种特殊数据类型 geospatial 地理位置 Redis 地理空间数据类型简介 Redis 地理空间索引允许您存储坐标并搜索它们。 此数据结构可用于查找给定半径或边界框内的邻近点。 基本命令 GEOADD 将位置添加到给定的地理空间索引(请注意,使用此命令&a…...
python 模块BeautifulSoup 从HTML或XML文件中提取数据
一、安装 Beautiful Soup 是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据。 lxml 只会局部遍历,而Beautiful Soup 是基于HTML DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多…...
VS Code插件汇总
插件 Basic Chinese(Simplified) Language Pack C/C C/C CMake Tools C/C Extension Pack Web Open in browser Microsoft Edge Tool Linux WSL Tool AWS Toolkit Bito AI Code Assistant CursorCode TabNine IntelliCode Kite...
QWidget
文章目录 QWidget是Qt中用于创建用户界面的基类之一,其拥有许多成员函数、槽函数、信号、静态函数和枚举。虽然无法在此提供所有的函数和枚举,但以下是一些常用的例子: 成员函数: 设置父窗口的函数: void setParent(…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
Django RBAC项目后端实战 - 03 DRF权限控制实现
项目背景 在上一篇文章中,我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统,为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...
【笔记】结合 Conda任意创建和配置不同 Python 版本的双轨隔离的 Poetry 虚拟环境
如何结合 Conda 任意创建和配置不同 Python 版本的双轨隔离的Poetry 虚拟环境? 在 Python 开发中,为不同项目配置独立且适配的虚拟环境至关重要。结合 Conda 和 Poetry 工具,能高效创建不同 Python 版本的 Poetry 虚拟环境,接下来…...
