编程笔记 Golang基础 022 数组

编程笔记 Golang基础 022 数组

  • 一、数组定义和初始化
  • 二、访问数组元素
  • 三、遍历数组
  • 四、数组作为参数
  • 六、特点
  • 七、注意事项

在Go语言中,数组是一种基本的数据结构,用于存储相同类型且长度固定的元素序列。

一、数组定义和初始化

// 声明并初始化一个整数类型的数组,包含3个元素
var numbers [3]int = [3]int{1, 2, 3}// 或者简写形式(编译器会根据初始值数量推断数组长度)
var numbers2 = [3]int{4, 5, 6}// 同时声明但不初始化
var uninitialized [5]int// 在函数内部声明并初始化数组
func initArray() {var arr [4]stringarr[0] = "apple"arr[1] = "banana"arr[2] = "cherry"arr[3] = "date" // 不需要显式为arr[3]赋值,因为Go会自动为剩余位置填充零值
}

二、访问数组元素

package mainimport "fmt"func main() {fruits := [5]string{"apple", "banana", "cherry", "date", "elderberry"}// 访问数组元素fmt.Println(fruits[0]) // 输出: applefmt.Println(fruits[2]) // 输出: cherry// 修改数组元素fruits[1] = "mango"fmt.Println(fruits)
}

三、遍历数组

package mainimport "fmt"func main() {daysOfWeek := [7]string{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}// 使用for循环遍历数组for index, day := range daysOfWeek {fmt.Printf("Day %d: %s\n", index+1, day)}
}

四、数组作为参数

package mainimport "fmt"// 定义一个接受整数数组的函数
func sum(numbers [3]int) int {total := 0for _, num := range numbers {total += num}return total
}func main() {nums := [3]int{10, 20, 30}result := sum(nums)fmt.Println("Sum of array:", result)
}

六、特点

  1. 存储和访问效率:数组的元素在内存中是连续存放的,因此可以通过索引(下标)快速访问和修改元素,对于随机访问操作具有较高的性能。

  2. 简单直观:数组提供了一种直接的方式来组织和管理同类型的数据集合,方便进行批量处理或迭代操作。

  3. 类型安全:每个数组都有严格的类型定义,只能存放指定类型的数据,确保了程序的安全性和一致性。

  4. 编程教育与理解基础数据结构:理解和掌握数组是学习更复杂数据结构(如切片、链表等)的基础,有助于对底层数据管理有深入的理解。

  5. 系统资源分配清晰:由于数组大小固定,编译时即可知道所需内存空间,这对于编写高效率且资源可控的程序十分重要。

七、注意事项

  1. 固定长度:在Go语言中,数组的长度是其类型的一部分,并且一旦声明后不可改变,这意味着你不能动态地扩展或收缩数组的容量。

  2. 值语义:数组是值类型,当数组作为函数参数传递时,会复制整个数组内容到新的内存空间。这意味着如果数组很大,可能会导致额外的性能开销。

  3. 默认零值:未初始化的数组元素将被赋予该类型对应的零值,例如整数为0,字符串为空字符串,自定义类型为零值状态。

  4. 不适合插入删除:因为数组的元素存储是连续的,所以在数组中间插入或删除元素会导致所有后续元素需要移动位置,这在实际使用中并不高效。

  5. 实用场景有限:虽然数组是基本的数据结构,但在许多实际应用中,开发者更多地倾向于使用切片(slices),它们基于数组实现,但提供了动态伸缩的能力,更加灵活。

  6. 语法细节:数组的声明通常包含数组长度和元素类型,例如 var arr [5]int 表示一个长度为5的整数数组。

  7. 索引越界检查:Go语言运行时不会自动检查数组索引是否越界,超出数组长度的索引会导致程序崩溃。因此,在使用数组时需特别注意边界问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/700315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue源码系列讲解——生命周期篇【三】(initLifecycle)

目录 1. 前言 2. initLifecycle函数分析 3. 总结 1. 前言 在上篇文章中,我们介绍了生命周期初始化阶段的整体工作流程,以及在该阶段都做了哪些事情。我们知道了,在该阶段会调用一些初始化函数,对Vue实例的属性、数据等进行初始…

Linux:Jenkins:GitLab+Maven+Jenkins的部署

1.环境 我这里准备了三台centos7 1.用于部署gitlab 运行内存:6G 名字:Jenkins-GitLab 192.168.6.1 2.用于部署jenkins 运行内存:2G 名字:Jenkins-server 192.168.6.2 3.用于打包测试…

【YOLO系列算法人员摔倒检测】

YOLO系列算法人员摔倒检测 模型和数据集下载YOLO系列算法的人员摔倒检测数据集可视化数据集图像示例: 模型和数据集下载 yolo行人跌倒检测一: 1、训练好的行人跌倒检测权重以及PR曲线,loss曲线等等,map达90%多,在行人跌…

招联金融VS兴业消金:洞察排头兵背后的秘密

来源 | 镭射财经(leishecaijing) 持牌消金历经十年浮沉,行业座次结构化调整加剧,但排头兵始终稳固如初。其中,招联金融和兴业消金长期位居榜首,以风向标姿态引领消金行业发展趋势。 从基因来看&#xff0…

【每日前端面经】2023-02-23

题目来源: 牛客 企业级开发整体流程有哪些 项目启动需求调研->需求文档系统设计->设计文档程序开发->开发文档BUG测试->测试文档验收维护 遇到技术难题怎么办 分析可能出现的原因查找搜索引擎寻问文心一言等对话模型打断点,寻找问题复现再一次归纳分…

.net6 webapi log4net完整配置使用流程

前置&#xff1a;为项目安装如下两个依赖 1.创建文件夹cfgFile 2.创建log4net.Config <?xml version"1.0" encoding"utf-8" ?> <log4net><appender name"ConsoleAppender" type"log4net.Appender.ConsoleAppender"…

月之暗面:Moonshot AI接口总结

前言&#xff1a; 开发者们只需访问 platform.moonshot.cn&#xff0c;便能创建自己的 API Key&#xff0c;进而将 Kimi 智能助手背后的同款 moonshot 模型能力&#xff0c;如长文本处理和出色的指令遵循等&#xff0c;集成至自己的产品中。这不仅增强了现有产品的功能&#x…

OkHttp 相关问题

1、OkHttp请求整体流程是怎么样? ​ Request-》OkHttpClient-》RealCall 同步 -》 在调用线程 执行五大拦截器 异步 -》 使用分发器将任务在线程池执行 五大拦截器 ---首先AsyncCall --加到等待队列readyAsyncCalls--》判断host有没有 已经存在。有,就赋值原来的。(reuseC…

docker安装及使用说明

docker安装及使用说明 Docker安装Windows版本Linux版本 Docker 使用 如果已经正确安装了docker&#xff0c;在日常使用中&#xff0c;关于常用命令和一些使用技巧可参考文章 [docker常用命令] Docker安装 Windows版本 微软要求 Windows 10 版本 2004 及更高版本&#xff08;内…

大离谱!AI写作竟让孔子遗体现身巴厘岛,看完笑不活了

大家好&#xff0c;我是二狗。 这两天我在知乎上看到了一个AI写作大翻车的案例&#xff0c;看完简直笑不活了&#xff0c;特地分享给大家一起 happy happy&#xff5e; 知乎网友“打开盒子吓一跳”一上来就抛出来了一个“孔子去世”的王炸。 首先&#xff0c;下面是一条真实新…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的犬种识别系统(附完整代码资源+UI界面+PyTorch代码)

摘要&#xff1a;本文介绍了一种基于深度学习的犬种识别系统系统的代码&#xff0c;采用最先进的YOLOv8算法并对比YOLOv7、YOLOv6、YOLOv5等算法的结果&#xff0c;能够准确识别图像、视频、实时视频流以及批量文件中的犬种。文章详细解释了YOLOv8算法的原理&#xff0c;并提供…

【Java程序设计】【C00286】基于Springboot的生鲜交易系统(有论文)

基于Springboot的生鲜交易系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的生鲜交易系统 本系统分为系统功能模块、管理员功能模块、用户功能模块以及商家功能模块。 系统功能模块&#xff1a;在系统首页可以…

Llama中文大模型-模型预训练

Atom系列模型包含Atom-7B和Atom-13B&#xff0c;基于Llama2做了中文能力的持续优化。Atom-7B和Atom-7B-Chat目前已完全开源&#xff0c;支持商用&#xff0c;可在Hugging Face仓库获取模型:https://huggingface.co/FlagAlpha 大规模的中文数据预训练 原子大模型Atom在Llama2的…

【第七天】C++模板探秘:函数模板、类模板以及类型转换的深入解析

一、模板的概述 c面向对象编程思想&#xff1a;封装、继承、多态 c泛型编程思想&#xff1a;模板 模板的分类&#xff1a;函数模板、类模板 函数模板&#xff08;类模板&#xff09;&#xff1a;将功能相同&#xff0c;类型不同的函数&#xff08;类&#xff09;的类型抽象成虚…

MMDetection3调试技巧查看Backbone Neck Head 输出---MMDetectionv2迁移

参考&#xff1a;MMDetection issue #9479 查看 Backbone &#xff1a; # 骨架网络构建 # from mmengine.registry import Registry import torch import numpy as np from mmdet.registry import MODELSif __name__ __main__:backbonedict(typeResNet,depth50,num_stages4,…

BeautifulSoup中的find_all()及select()查找方法

#Beautiful Soup库中的find_all()方法是用于查找HTML文档中符合指定条件的所有元素。它返回一个列表&#xff0c;其中包含了找到的所有元素。 # 对于Beautiful Soup库中的find_all()方法&#xff0c;其参数类型可以分为以下几种&#xff1a; # 标签名&#xff1a;字符串类型&a…

聊聊Sora这个AI大神和中美技术赛跑那些事儿

最近有个叫Sora的AI模型火得一塌糊涂。它就像个魔法师&#xff0c;你给它一段话描述&#xff0c;它就能变出一段60秒的高清视频来&#xff0c;这可比之前咱们看过的那些文字转图片的AI厉害多了。想象一下&#xff0c;以后拍电影预告片、做广告宣传啥的&#xff0c;可能直接让So…

Java命令模式:让请求成为对象

Java命令模式&#xff1a;让请求成为对象 在软件设计中&#xff0c;我们经常遇到需要将操作或请求封装成对象的情况。这样&#xff0c;我们可以将它们作为参数传递、排队、记录或撤销。命令模式正是为了满足这种需求而诞生的。在命令模式中&#xff0c;一个请求或操作被封装成…

Ansible 更换aliyun 镜像 并下载tree

目录 查看系统版本找到对应 的版本对当前镜像进行备份下载aliyuan更换成功安装扩展源更换源之后 的三个命令 这里安装一个aliyun 的镜像 本案例 仅供实验参考 生产环境中请谨慎使用 查看系统版本 先查看linux 的系统 版本 ansible slave -m shell -a uname -a找到对应 的版本…

【Spring面试题】

目录 前言 1.Spring框架中的单例bean是线程安全的吗? 2.什么是AOP? 3.你们项目中有没有使用到AOP&#xff1f; 4.Spring中的事务是如何实现的&#xff1f; 5.Spring中事务失效的场景有哪些&#xff1f; 6.Spring的bean的生命周期。 7.Spring中的循环引用 8.构造方法…