go 声明二维数组_一篇文章了解Go语言中数组Arrays的使用内幕

概述

与其他编程语言类似,Go语言也有数组array。Go语言中,数组的行为和其他语言没有什么不同.Go语言中还有一个叫做切片slice的东西,它就像是对数组的引用。在本文中,我们将只研究数组。

定义

数组是同一类型元素的连续集合,它是连续存储在内存中的有序元素序列。

下面是数组声明的格式:

09fc8f32cf62c7b987d18331a1f61ee2.png
  • size_of_array:数组大小或数组长度,表示数组中所有元素的数量
  • type :数组元素类型,表示数组中每一个元素的类型
  • a1, a2 … an:表示数组中实际的元素值

Go语言中,数组的大小是其类型的一部分。这意味着两个拥有不同数量元素的数组是两种不同的类型,它们不能互相赋值。如果我们试图赋值两个不同长度的数组,将引发以下错误:

8c3d81af36f7f2892b2831961adc51ba.png

下面是代码示例:

6acd34d8fb463df6be53c3266f98552e.png

出于同样的原因,数组的长度在创建时是固定的,以后不能更改。

数组的声明

元素数量和元素值在数组声明中都是可选的。

在下面的示例中,我们看到了声明数组的4种方法。

同时声明数组长度和元素值,如下所示:

8777a1a1f9e25056f0f5eb5ffa205fa6.png

只声明数组长度,这种情况下,所有实际元素值都是该类型的默认零值填充,如下所示:

91a3fed70eda55cc277032b0bf3a809c.png

只声明元素值,这种情况下,数组的长度将等于实际元素的数目。当不指定长度时,需要将符号...放在方括号内。该符号是让编译器计算数组长度的指令。

1a379073759d41f6bca358113bc95a47.png

不声明数组长度和元素值,这种情况下,创建的是一个空数组,类似于上面,符号...也需要使用。

c73b2c5bfa31359c6b3a9db33cebfe6e.png

下面是以上4种数组声明的代码示例。内置函数len()是用于计算数组的长度。在下面的程序中,我们使用len()函数来计算数组的长度。

e18e2ca5dce8f3d7fc87ae87e9e7acd2.png

请注意,在上面的示例中,对于sample3变量,实际的元素值被int类型的默认值填充,即0。

如果指定的实际元素个数小于数组的长度,也是可以,其余元素将使用该类型的默认零值填充。请参见下面的示例,指定的数组长度为4,而只声明了2个实际元素值,因此,剩下的两个元素被赋值为0,这是int类型的默认零值。

0b49374ba2be65927336ab1db796fbf9.png

访问数组元素

由于数组元素是以连续的方式存储的,所以我们可以通过索引来访问数组元素。同样,也可以使用索引为某个数组元素赋值。访问越界索引将导致编译错误。请参阅下面的示例,第一个索引位置为零,最后一个索引为数组长度减1(length_of_array-1)

be38876e966ae90bbe15923961c34d52.png

取消对下面这行代码的注释:

b61f9344dcbb971e29689f4ae1a88f92.png

你就会得到一条编译错误:

a6ee50f3d590942da685b3c2d4dbaee4.png

Go语言中的数组是值

数组在Go语言中的属于值类型,所以数组变量名不是指向第一个元素的指针,实际上它表示整个数组。

当以下情形发生时,一个数组的副本会被创建:

  • 一个数组变量被赋值给另一个数组变量
  • 数组变量作为参数传递给函数

让我们用另一个例子来看看:

247f433f118fea4f5fdb69253c097edd.png

在上面的例子中,

  • 我们将sample1赋值给sample2,然后将sample2处的第0个索引的元素更改为不同的值。之后,当我们打印sample1时,我们看到它没有改变。这是因为当将sample1赋值给sample2时,会创建一个副本赋给它,而更改sample2对sample1没有任何影响。
  • 我们将sample1传递给test函数,然后在test函数的第0个索引处再次更改其值。当我们再次打印sample1时,看到它仍然没有任何改变。原因是相同的,当sample1作为参数传递给test函数时,会创建sample1的副本。

迭代数组的不同方法

可以使用以下方法迭代一个数组:

  • 使用for循环
  • 使用for-range循环

让我们看看下面的代码示例:

14304dac68cb815a4616180f91530fa5.png

多维数组

下面是声明一个二维数组的格式:

7b5ce6aaff6c6e05d30243f32102b465.png

其中,

  • x表示行数
  • y表示列数
  • aij表示i行j列的元素

同样的想法可以扩展到三维、四维等等。我们上面讨论的所有规则也适用于多维数组。

让我们看一个代码示例:

cf9c4ac52fa25158575553e8c719861b.png

在上面的例子中,我们使用第一和第二维的索引来访问二维数组的元素

28e71a2e3dcf69d78b79889eb57c7f8b.png

还要注意我们是如何遍历二维数组的。我们需要使用嵌套的range。第一个range遍历二维数组里的一维数组,第二个range遍历各个一维数组。

结论

这就是Go语言中关于数组的所有使用内幕,希望你喜欢这篇文章。请在评论中分享反馈和关注。

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

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

相关文章

ffmpeg 使用ffplay 进行 hls 拉流 分析 1

ffmpeg 使用 ffplay 进行 hls 拉流 分析 1 从使用ffplay 调用 http://192.168.1.100:8080/live/livestream.m3u8 开始,进入到ffmpeg 的分析使用的协议选择相应的解复用器的步骤。 其他协议或者文件方式的使用ffplay也是这个步骤流程的。 目录:一、流程图…

搜狗输入法输出特殊符号快捷键

https://www.petefreitag.com/cheatsheets/ascii-codes/ 参考上个编码网站大全 详细步骤为:alt长按 + 编码数字 例如:平方的编码为178-----长按alt178 即可,178是数字一个一个挨个按即可 常用的特殊符号如下: 平方&…

[BuildRelease Management]CC.NET架构

一 CC.NET的操作流程 1) 等待Trigger的唤醒; 2)从Source Control System查询上次build以后的修改列表; 3)如果任何修改被发现或是Trigger触发类型为 force the build : 3.1)为build产生一个label number&a…

python 入门到实践期末考试常出现的考试内容_Python编程入门到实践—列表篇(一)...

一、列表是什么?列表由一系列按特定顺序排列的元素组成。可以创建包含字母表中所有字母、数字0-9或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。列表通常包含多个元素,给列表指定一个表示…

c#中将集合写入文本_在C#中将记录插入MySQL数据库

c#中将集合写入文本In the last tutorial (how to connect with MySQL database in C#?), we learned about making the connection with MySQL database in C#. Here, in this tutorial, we will learn how to insert the records in MySQL database in C#? 在上一教程( 如何…

day1-Linux操作系统基础

该专栏所有内容笔记均来自传智播客培训班 1.什么是操作系统(operate system OS) 小议:承上启下作用,向下可以控制硬件,向上能够支持软件的运行。一个可以控制硬件的软件。 小明找小红聊天,小明打开QQ&…

关闭浏览器 清空session_跨境网络小知识之Session

跨境小伙伴们大家好,上一篇为大家介绍了Cookie,今天就为大家介绍下连接cookie的另一端Session,交互过程中,二者缺一不可。与Cookie相对,Session是存储在服务端的,他们之间是通过一个叫做sessionID的东东建立…

Dojo学习笔记(一):Hello Dojo!

欢迎来到Dojo世界!在这篇文章中你将会学习到如何加载Dojo以及探索Dojo的一些核心功能。你还会了解Dojo的基于AMD的模块架构,探索如何加载额外的模块来增加功能到您的Web站点或应用程序,并找出在出错的时如何得到帮助。让我们开始吧 开始学习D…

转:我眼中的Visual Studio 2010架构工具

来自:http://www.cnblogs.com/wayfarer/archive/2010/07/30/1788398.html我眼中的Visual Studio 2010架构工具影响架构质量的是构建体系架构的思想、原则、实践与架构师的经验,绝不是工具。即使是最优秀的架构工具,也不可能像倚天宝剑一般——…

VMware创建Ubuntu操作系统到网络配置详细流程

一、创建虚拟机 Ubuntu下载链接 1,看个人需求了,有更高的版本,下载Ubuntu镜像 2,VMware官网随便下载即可 3,创建新的虚拟机 4,自定义 5,默认即可 6,稍后安装操作系统 7&#xf…

djiango配置mysql_数据库MySQL相关环境配置以及数据库与Go的连接

Linux下安装好MySQL后,Windows安装可视化工具navicatLinux下MySQL与Windows下navicat进行连接:安装的过程很是揪心,各种查网站、大致把坑都写了出来:1、在Linux下的mysql语句中,mysql> select host,user,authentication_string…

基于HtmlParser的网络爬虫

一、 目标 获取网页中的超链接及链接名,如从http://www.hao123.com/开始,抓取所有hao123链接到的超链接,再以获取到的链接网页为目标,获取它所链接到的网页。 二、环境及开发工具 环境:Java 工具:MyEclip…

VMware下Ubuntu无法全屏显示问题

一、运行Ubuntu的时候无法全屏显示,如图所示下载VMware Tools 二、之后将下载的文件拷贝到home文件夹下 三、解压该压缩包 由于该压缩包是.tar.gz结尾的故压缩命令:tar -zxvf VMwareTools-10.2.5-8068393.tar.gz,当然各版本有可能不一样&am…

AMQP RabbitMQ

转载:http://blog.ftofficer.com/2010/03/translation-rabbitmq-python-rabbits-and-warrens/官方介绍:http://www.rabbitmq.com/erlang-client-user-guide.html开始吧AMQP当中有四个概念非常重要:虚拟主机(virtual host&#xff…

fsync与fflush的关系和区别

read/write/fsync与fread/fwrite/fflush的关系和区别 read/write/fsync: linux底层操作; 内核调用, 涉及到进程上下文的切换,即用户态到核心态的转换,这是个比较消耗性能的操作。 fread/fwrite/fflush:…

数据库系统数据库管理系统_数据库管理系统介绍

数据库系统数据库管理系统数据库 (Database) A database is a collection of related data. In database any user can efficiently access the data which users want to retrieve. It can be anything from a simple collection of roll numbers, names, addresses and phone…

srs配置文件分析

配置文件中的每一项都是一个SrsConfDirective对象。 例子:vhost 1、 整个vhost 是一个SrsConfDirective对象。 1.1、名字:std::string name vhost 1.2、参数:std::vectorstd::string args第0个值 defaultVhost 1.3、子SrsConfDirective&a…

寄存器(CPU工作原理)03 - 零基础入门学习汇编语言08

第二章:寄存器(CPU工作原理)03 让编程改变世界 Change the world by program 物理地址 CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。 我们将这个唯一的地址称为物理地址。 16位结构的CPU…

Anaconda下安装OpenCV和Tensorflow(最简洁高效的方法)

安装Tensorflow 1,打开Anaconda Navigator 2,手动创建tensorflow环境,这个和你的python版本号一致哈(方法一第一步之后,输入python即可查看当前的版本) 3,手动搜索并下载添加 4,…

使用FD_CLOEXEC实现close-on-exec,关闭子进程无用文件描述符

我们经常会碰到需要fork子进程的情况,而且子进程很可能会继续exec新的程序。这就不得不提到子进程中无用文件描述符的问题! fork函数的使用本不是这里讨论的话题,但必须提一下的是:子进程以写时复制(COW,C…