Go语言基础:数组定义及循环遍历
前言
大家好,我是沐风晓月,本文go语言入门-掌握go语言函数收录于《go语言学习专栏》专栏,此专栏带你从零开始学习go语言,持续更新中,欢迎点赞收藏。
🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业,阿里云博客专家
😉😉 💕 座右铭:先努力成长自己,再帮助更多的人,一起加油进步
🍺🍺🍺💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信
文章目录
- 前言
- 一. 数组的介绍
- 1.1 什么是数组?
- 1.2 数据的声明及语法
- 二. 数组的初始化
- 2.1 指定长度和初始值
- 2.2 不指定数组长度来初始化数组
- 2.3 指定长度,通过索引值来初始化
- 2.4 不指定长度,通过索引值进行初始化
- 2.5 数组的访问
- 三. 数组的比较
- 3.1 数据类型相同,但长度不同
- 3.2 数据类型相同且长度相同
- 四. 数组的遍历
- 五 . 二维数组
- 5.1 二维数组的介绍
- 5.2 二维数组的遍历
- 总结
一. 数组的介绍
1.1 什么是数组?
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。
- 数组可以由0个元素或者多个元素组成,但不能增长和收缩。
- go语言中,数组是一种值类型,元素可以被修改。
- 数组的元素索引从0开始
1.2 数据的声明及语法
Go 语言数组声明需要指定元素类型及元素个数,语法格式如下:
var varName [SIZE]var Type
语法说明如下所示:
- varName(数组变量名):数组声明及使用时的变量名。
- SIZE(元素数量):数组的元素数量,可以是一个表达式,但最终通过编译期计算的结果必须是整型数值,元素数量 不能含有到运行时才能确认大小的数值。
- Type(数组类型):可以是任意基本类型,包括数组本身,类型为数组本身时,可以实现多维数组。
举例: 定义一个数组mufeng,长度为10,类型为float32
var mufeng [10] float32
二. 数组的初始化
2.1 指定长度和初始值
指定长度和初始化值,初始化数组中 {} 中的元素个数不能大于 [] 中的数字:
package mainimport "fmt"func main() {var mufeng = [5]float32{1.0, 2.0, 3.0, 4.0, 5.0}fmt.Println(mufeng)
}
这里要注意,初始值的元素之间需要用,
隔开,当[5]
中指定为5个,后面的大括号就不应该能大于5,但可以小于5. 小于5的时候,会有默认值补全。 比如数字类型,默认值就是0.
package mainimport "fmt"func main() {var mufeng = [5]float32{1.0, 2.0, 3.0, 4.0}fmt.Println(mufeng[4]) // 结果就为0
}
可以看到当我们获取mufeng下标为4的值的时候,结果就是0.
2.2 不指定数组长度来初始化数组
当我们不指定长度的时候,也就是[]
中不写入内容,GO语言默认会根据元素的个数来设置数组的大小。
package mainimport "fmt"func main() {var mufeng = []int{1, 2, 3, 4}fmt.Println(mufeng)}
2.3 指定长度,通过索引值来初始化
此时我们使用索引值来初始化,1:1
就表示,下标为1的元素,初始值为1. 下标默认初始值为0,我们看下面的代码案例:
package mainimport "fmt"func main() {mufeng := [4]int{1:1, 2: 2}fmt.Println(mufeng)//执行结果为[0 1 2 0 ]
}
由执行结果可以看出,下标0 未定义,所以输出结果为0.
2.4 不指定长度,通过索引值进行初始化
如果我们不指定长度,系统会默认以你索引值的最大值来决定长度。 比如:
package mainimport "fmt"func main() {mufeng := []int{1: 1, 4: 2}fmt.Println(mufeng)//执行结果为[0 1 0 0 2]
}
这个脚本中,虽然没有指定长度,但是索引值最大是4,而且索引值为4的时候,初始化为2.,未初始化的都是0.
所以执行结果为 [0 1 0 0 2]。
2.5 数组的访问
数组的每个元素都可以通过索引下标来访问,索引下标的范围是从 0 开始到数组长度减 1 的位置,内置函数 len()
可以返回数组中元素的个数。
package mainimport "fmt"func main() {mufeng := []int{1: 1, 4: 2}fmt.Println(mufeng)//执行结果为[0 1 0 0 2]var mufeng1 = [4]int8{2, 4, 6, 8}fmt.Println("对mfueng1取索引为3的值", mufeng1[3])//对mfueng1取索引为3的值 8fmt.Println("统计元素个数", len(mufeng1))//统计元素个数 4
}
想要获取第几位的值,就根据下表去访问,比如第一位的值 mufeng1[0]
,打印最后一个元素,但你不知道最后一个是第几位,就可以用len()
package mainimport "fmt"func main() {mufeng := []int{1: 1, 4: 2}fmt.Println(mufeng[len(mufeng)-1])//执行结果为2
}
这里的计算公式是: 先统计一共有多少个元素:len(mufeng)
, 而下标值就等于总元素的个数减1. len(mufeng)-1
.
有了下标值之后,就可以根据下标获取元素值, 也就是mufeng(len[(mufeng) -1])
.
三. 数组的比较
3.1 数据类型相同,但长度不同
我们学字符串类型的时候,经常会把 a== b
把b复制给a, 但在数组这边,需要注意几个地方:
虽然数据类型相同,但长度不相等的两个数组,肯定是不相等的。 比如 [3]int
和[4] int
,这其实是两种不同的数组类型。
mufeng := [2] int{1,2}
mufeng=[3]int{1,2,3} 这里的赋值方法是错误的,因为他们两个的长度不相等
3.2 数据类型相同且长度相同
如果两个数组类型相同(包括数组的长度,数组中元素的类型)的情况下,我们可以直接通过较运算符(==和!=)来判断两个数组是否相等,只有当两个数组的所有元素都是相等的时候数组才是相等的,不能比较两个类型不同的数组,否则程序将无法完成编译。
可以看到,当mufeng1 和mufeng2 以及mufeng4对标的时候,因为[]
里的值不同,所以无法编译通过。
四. 数组的遍历
一维数组的声明及遍历代码:一个标准的for循环遍历及一个range调用遍历
for...range
迭代的性能会更好一些,他的语法:
for index,value := range myArray{//循环体
}
格式说明:
- index:保存每个元素索引的变量
- value:保存每个元素值的变量
- myArray:正在处理的数组
package mainimport "fmt"func main() {var mufeng3 = []int{1, 2, 3, 4, 5}//for循环变量的方法//这里是把两种方法写一起了所以把上面的注释掉了//for i := 0; i <= len(mufeng3); i++ {// fmt.Println(mufeng3[i])//}//fmt.Println("\n")//使用range的方法for _, value := range mufeng3 {fmt.Println(value, "\t")}
}
注意: 这里是把两种方法写在一起了,所以把上面的for
循环注释掉了 。
推荐使用for range
的方式。
补充: 使用fmt输出数组相关的信息:
package mainimport "fmt"func main() {var mufeng3 = [5]int{1, 2, 3, 4, 5}fmt.Println(mufeng3)fmt.Printf("%#v", mufeng3)fmt.Printf("\n")fmt.Printf("%T", mufeng3)
}
输出结果:
[1 2 3 4 5]
[5]int{1, 2, 3, 4, 5}
[5]int
五 . 二维数组
5.1 二维数组的介绍
有一个下标,我们叫一维数组,有两个下标的就是二维数组,一般日常开发中,用到三维数组以上的就比较少了。
二维数组的案例:
package mainimport "fmt"func main() {var mufeng [3][4]intmufeng[1][2] = 3mufeng[2][1] = 4fmt.Println(mufeng)
}// 执行结果:
//[[0 0 0 0] [0 0 3 0] [0 4 0 0]]
为了便于理解,在这里我们把[1][2]
,定义为 第一个是[1]
是a,第二个是[2]
是b.
可以看到我们定义的mufeng[1][2] = 3
,实际上就是 a1的b2的位置等于3. 如图所示:
5.2 二维数组的遍历
package mainimport "fmt"func main() {//一维数组定义//var 数组名 [元素个数] 数据类型//二维数组//var 数组名 [行个数][列个数] 数据类型var mufeng [3][4]int// 通过行和列的下标找到具体元素mufeng[1][2] = 1 //赋值操作mufeng[2][1] = 13mufeng[0][3] = 33//fmt.Print(arr)for i := 0; i < 3; i++ {for j := 0; j < 4; j++ {fmt.Print(mufeng[i][j], " ")}fmt.Println()}}
执行结果:
0 0 0 33
0 0 1 0
0 13 0 0
总结
以上就是今天的全部内容,希望对你有用。
💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
💕 本文由沐风晓月原创,首发于CSDN博客, 博客主页:mufeng.blog.csdn.net
💕 日拱一卒无尽有,功不唐捐终入海
💕 喜欢的话记得点赞收藏哦
相关文章:
Go语言基础:数组定义及循环遍历
前言 大家好,我是沐风晓月,本文go语言入门-掌握go语言函数收录于《go语言学习专栏》专栏,此专栏带你从零开始学习go语言,持续更新中,欢迎点赞收藏。 🏠个人主页:我是沐风晓月 🧑个人…...
【树与二叉树】二叉树顺序结构实现以及堆的概念及结构--详解介绍
📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯长路漫漫浩浩,万事皆有期待 文章目录1. 二叉树顺序结构2.…...
天狗实战(二)SpringBoot API开发详解 --SpringMVC注解+封装结果+支持跨域+打包(下)
本文目录 前言专栏介绍一、创建SpringBoot项目1.1 添加springboot依赖1.2 创建启动类1.3 创建控制器类1.4 Run 或 Debug二、开发图书管理API2.1 web层BookAdminControllerBookVO2.2 service层BookServiceBookServiceImplBookBO2.3 dal层...
实验一 Windows系统安全实验【网络安全】
实验一 Windows系统安全实验【网络安全】前言推荐实验一 Windows系统安全实验3.1 帐户和口令的安全设置3.1.1 实验目的3.1.2 实验环境3.1.3 实验内容和步骤1. 删除不再使用的帐户并禁用guest帐户2.启用密码策略和帐户锁定策略3.查看“用户权限分配”4.查看“用户组权限分配”5.…...
蓝桥杯正确的解题姿势
在做算法题的过程中最忌讳的就是上来就一顿乱敲,一开始我就是这样,但随着不断的刷题和老师的指导,总结了自己的刷题方法 示例题目 三角回文数 问题描述 对于正整数 n, 如果存在正整数 k使得 n123...kk(k1)/2 , 则 n 称为三角数。例如, 66066 …...
【mysql】性能优化
目录一、硬件与操作系统二、架构设计层面的优化三、mysql程序配置优化四、mysql执行优化一、硬件与操作系统 1.使用高性能cpu,提高计算能力 2.增大可用内存,提高读取能力 3.提高硬盘的读写速度,使用专用的固态硬盘 4.增大网络带宽,…...
Jupyter安装与远程使用过程记录
Jupyter安装与远程使用过程记录 文章目录Jupyter安装与远程使用过程记录Jupyter在线试用在服务器上安装Jupyter Notebook配置服务器远程连接首先保证ip地址连通性其次开启服务器访问端口然后在服务器启动服务最后测试连通性后续使用教程Jupyter在线试用 官网适用,感…...
Swift入门
基本数据类型 Int、UInt:整数型、非负整数Float、Double:单精度浮点数、双精度浮点数Bool:布偶值String、Character:字符串、字符 其他类型 Array, Dictionary:数组、字典StructClassvar:变量let&#x…...
【HashMap】jdk1.8中HashMap的插入扩容源码学习分析
jdk1.8中HashMap的插入扩容源码学习分析 一、成员变量 首先介绍HashMap中各个成员变量的作用,在HashMap中有以下成员变量 size记录了HashMap中键值对的个数 loadFactor(加载因子)用来决定size达到容量的百分之多少时触发扩容机制 默认是0…...
Linux编译器-gcc/g++ 使用
在介绍gcc/g的使用前我们先了解一下两者的不同 gcc时主要编译c语言,而g主要编译c的,但是两者的选项是相同的,因此我们以gcc和c语言为例来讲解。背景知识 gcc和g都是编译器其核心作用将文本类文件翻译成二进制可执行 那么其过程是怎样的&…...
网络安全专家最爱用的9大工具
网络安全专家,不是你认为的那种搞破坏的 “黑客”。网络安全专家,即 “ethical hackers”,是一群专门模拟网络安全专家攻击,帮助客户了解自己网络的弱点,并为客户提出改进建议的网络安全专家。 网络安全专家在工作中&a…...
Linux内核设计与实现第四章学习笔记
文章目录Linux内核设计与实现第四章学习笔记具体场景Linux调度算法传统的调度公平调度调度的实现时间记账调度器实体虚拟实时进程选择调度器入口睡眠和唤醒抢占和上下文切换用户抢占内核抢占实时调度策略Linux内核设计与实现第四章学习笔记 进程优先级:Linux中采用…...
i.MX9352——介绍一款多核异构开发板
本篇来介绍一款多核异构的Linux开发板——OK-MX9352-C开发板。 1 开发板硬件介绍 OK-MX9352-C开发板由核心板和底板组成,核心板采用处理器芯片为NXP的i.MX9352,这是一款多核异构的芯片,核心板基础配置如下 CPU:2Cortex-A551.5G…...
【Python】一文学会面向对象?当然可以的
文章目录前言一、万物皆对象二、类也是对象三,元类总结前言 在大家学习python的时候,一定听说过一句话: 在我们python中万物皆对象,不管是整数、字符串、列表、字典这些基本数据类型,还是函数、以及自定义类创建出来…...
ElasticSearch - SpringBoot整合ES:精确值查询 term
文章目录00. 数据准备01. ElasticSearch 结构化搜索是什么?02. ElasticSearch 结构化搜索方式有哪些?03. ElasticSearch 全文搜索方式有哪些?04. ElasticSearch term 查询数字?05. ElasticSearch term 查询会不会计算评分…...
【GPT4】微软对 GPT-4 的全面测试报告(2)
欢迎关注【youcans的GPT学习笔记】原创作品,火热更新中 微软对 GPT-4 的全面测试报告(1) 微软对 GPT-4 的全面测试报告(2) 【GPT4】微软对 GPT-4 的全面测试报告(2)2. 多模态与跨学科的组合&…...
Docker打包exe运行环境
Docker打包exe运行环境 本文运行环境 Window安装Docker环境 修改配置 点击Switch to Window containers OS/Arch 变为 windows/amd64 拉取window镜像 访问Nano Server找到需要的Window版本拉取镜像 运行镜像测试 进入到容器内部 其他内容就自由发挥啦~~ 参考内容…...
springboot+vue田径运动会成绩管理系统java
springboot是基于spring的快速开发框架, 相比于原生的spring而言, 它通过大量的java config来避免了大量的xml文件, 只需要简单的生成器便能生成一个可以运行的javaweb项目, 是目前最火热的java开发框架 田径运动会成绩管理系统,主要的模块包括首页、个人中心、赛…...
我能“C”——详解操作符(上)
目录 1.操作符的分类: 2. 算数操作符 3.移位操作符 4.位操作符 5.赋值操作符 6.单目操作符 7.关系操作符 8.逻辑操作符 THE END 1.操作符的分类: 操作符也叫运算符 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑…...
第一章Vue基础
文章目录前端发展史前端三要素JavaScript框架UI框架JavaScript构建工具三端合一什么是VueVue的好处什么是MVVM为什么要使用MVVM环境配置第一个Vue程序声明式渲染模板语法绑定样式数据绑定为什么要实现数据的双向绑定el与data的两种写法条件渲染事件驱动事件的基本用法事件修饰符…...
【虚幻引擎UE】UE5核心效率插件推荐
一、UnrealEditorPythonScripts (基于UE5 的Python支持插件) 支持Python语言基于UE5进行开发 GIT地址:https://github.com/mamoniem/UnrealEditorPythonScripts 二、Haxe-UnrealEngine5 (基于UE5 的Haxe支持插件) Haxe是一门新兴的开源编程语言,是一种开源的编程语言。…...
记录丨阿里云校招生的成长经历
为了帮助大家更好地了解阿里云云原生应用平台团队同学的成长路径,我们采访了6位各个时间点加入阿里云的学长学姐们,希望他们的经历可以帮助到大家。 经历分享 钰诚丨2022年加入阿里云,校招 大家好,我叫钰诚,目前刚来…...
蓝桥杯第14天(Python版)
并查集的使用# 并查集模板 N400 fa[] def init(): # 初始化,默认自身为根接点for i in range(N):fa.append(i)def merge(x,y): # 发现可以合并,默认选x的根节点为根接点fa[find(x)]find(y)def find(x): # 相等就是根结点,不然就递归查找根…...
双指针常用方法
1.双指针介绍 双指针是解题时一种常见的思路,一般有两种用法。 1)两个指针反方向,分别从数组开头和结尾开始移动,例如对有序数组的搜索。 2)两个指针同方向移动,例如快慢指针,都是从数组开头…...
人工智能大模型之ChatGPT原理解析
前言 近几个月ChatGPT爆火出圈,一路狂飙;它功能十分强大,不仅能回答各种各样的问题,还可以信写作,给程序找bug…我经过一段时间的深度使用后,十分汗颜,"智障对话"体验相比,…...
傅里叶谱方法-傅里叶谱方法的原理、快速傅里叶变换及其Matlab程序实现
第 3 章 傅里叶谱方法 本章介绍的求解偏微分方程(组)的方法都包含着周期性边界条件, 尽管周期性边界条件不属于数学物理方法中常见的传统三类边界条件, 但它并不脱离实际。某些科学问题的研究重点不受边界的影响, 如孤子之间的相互作用 (非线性薛定谔方程或 K d V \mathrm{…...
11万字数字政府智慧政务大数据建设平台(大数据底座、数据治理)
本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除。部分资料内容: 一.1.1 数据采集子系统 数据采集需要实现对全区各委办单位的数据采集功能,包括离线采集、准实时采集和实时采集的采集方式,根…...
Node.js学习笔记——Node.js模块化
一、介绍 1.1.什么是模块化与模板? 将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为模块化。 其中拆分出的每个文件就是一个模块,模块的内部数据是私有的,不过模块可以暴露内部数据以便其他模块…...
【洛谷刷题】蓝桥杯专题突破-广度优先搜索-bfs(12)
目录 写在前面: 题目:P1746 离开中山路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述: 输入格式: 输出格式: 输入样例: 输出样例: 解题思路: 代码: …...
【数据结构】堆(堆的实现 堆向下调整算法 堆的创建 堆的插入 堆的删除 堆的代码实现 堆的应用)
文章目录堆的实现堆向下调整算法堆的创建堆的插入堆的删除堆的代码实现堆的应用堆的实现 堆是属于操作系统进程地址空间内存区域的划分。 我们下面实现数据结构中的堆。 堆是一个完全二叉树:分为小根堆和大根堆。 小根堆:任何一个节点的值都<孩子的…...
深圳o2o网站建设/网站模板
地址如下:https://github.com/Snailclimb/JavaGuide 星号非常多。是看到最全最细的Java 学习和面试指南了,涵盖了Java基础,并发,JVM,计算机基础等核心知识点,还总结了常用框架,大厂高频面试题和…...
阳光电子商务平台/网络seo营销推广
undefined :表示已经声明变量,但是没有赋初始值,返回类型为 undefined; null:的返回类型是object,表示一个空对象引用。转载于:https://www.cnblogs.com/guanyushan/p/7768487.html...
镇江专业网站建设/app拉新接单平台
资源下载:https://download.csdn.net/download/weixin_44893902/33163160 一、语言和环境 实现语言:JAVA语言环境要求:IDEA/Eclipse Tomcat MySql使用技术:Spring Boot 或 SSM 二、实现功能 随着公司业务的发展,需…...
服装 公司 网站建设/关键词爱站网关键词挖掘工具
蓝牙耳机是运动和跑步的必备产品,它可以为我们的运动过程增加很多乐趣,无论它是舒适的还是充满节奏的音乐,它也可以带来继续坚持下去的动力。由于它是不可或缺的合作伙伴,我如何选择适合自己的蓝牙耳机?许多运动小白对…...
asp.net做网站的流程/移动网站推广如何优化
先来说说序列化是什么吧,序列化是将对象的状态信息转换成可以存储或传输的形式的过程。在序列化期间,将对象的当前状态写入临时或永久存储区。稍后,您可以通过从存储区读取或恢复对象的状态重新创建对象。简而言之,序列化是一种将…...
政府网站建设总结报告/自己制作网页的网站
da-dapps在过去的几周中,我们使用Blockstack构建了一个去中心化的应用程序 ,使您可以创建和保存Web应用程序片段。 到目前为止,这些代码段已私下保存到您自己的个人存储中。 甚至应用程序的创建者都无法访问它们! 但是网络也是关于…...