00:00
各位,我们接着来为大家讲解go语言里面的数组,好,我们接着往下看。那么我们上一讲呢,我们讲到了使用for这种结构来对数组进行便利,对吧?现在我们接着来看一下数组需要注意的事项和细节,这块呢也是非常重要的。对不对?所以我们要看一看,在go语言里边,它的数组在使用的时候跟别的编程语言有什么不一样的地方。那我们来看一下第一点。第一点哦,我们一边讲呢,还是一边做笔记。来把这个做一做。现在我们讲的是宿主。宿主使用的注意事项。和什么和细节。我们来进行一个处理,好吧,我们来进行一个讲解,嗯,那我这里呢,给大家总结了有十个需要注意的地方,我看第一点数组是多个相同数据的组合。
01:04
注意听这句话,相同类型,也就是说,如果你定的一个数组是int类型的,那么它只能存放int。比如INEL32,那就只能存INT32,连INEL64都存不进去,能理解吧?如果一个数组一旦声明定义了,其长度是固定的,不能动态变化,这点是要注意的。其他的编程语言也有这样的特点,就说数组的长度本身也是数据类型的一部分。就这个程度呢,他一旦写写下来了,你就不能说,诶我给他动态的增长,这是不允许的,那么我们把这前面这几个细节先把它拿过来,一边讲一边做笔记来整理一下。看第一个,我们先说第一个。这是第二个。对吧,这是第三个,我们每一个呢,都给大家做一个案例,好呃,为了把这块说清楚呢,我们新建,我们在CHAPTER07里边呢,新建一个文件夹,我们叫A。
02:10
什么呀,叫细节details。专门讲细节的问题。OK,那现在呢,我们新建一个文件main.go。啊,把它前面这一部分写清楚,Package import。对不对,然后might写上一个主函数。我们来看看他的刚才说的第一个细节。哦,这个地方粘多了。好吧,我们看第一个,嗯,数组是相同类型的一个组合,而且呢,长度一旦写,一旦声明了,长度是固定的,不能动态变化,什么意思呢?给大家举个例子,比方说吧,现在大家看到。比方说我这里有一个数组。有一个数组VR,比如说这这个数组零,一,我定义的类型是这样子的,存放三个数据,OK,然后里边呢,我们定义的是。
03:09
我们给他来一个int类型的,好吧,给他来一个int类型的。好,这个呢,我们就定好了。这个我们就定好了,这个定好了以后注意,首先它在存放的是相同数据类型的组合,那就意味着我们这样用是可以的。就是201。给他来一个零,给他来一个一,这个是可以的。下面。再给他来一个数据,比如说是30,这个是可以的,第三个元素,我们给他来个1.1,这个就不行。这个地方会报错。这里会报错。报错的原因就是因为我们说过数据类型,既然你定的是int,你就不能够给他一个小数。说这里会报错,我们来看是不是这样子,来我们把这个打印出来。
04:01
或慢print来,我们把数组输出来。保存一下,当我保存的时候,这地方编译就应该会出错,果然出错了,看他说看一个常量1.1,不能够给个integer,就这个数据类型不匹配。不必备报错。啊,也就是说数据类型呢,一定要相同,OK,这点请大家注意一下,好,这个地方注意一下,我们把这块放到这,这是第一个需要同学们注意的。啊,需要同学们注意,第二个呢,同学们注意还有一个细节,一个数组一旦声明其长度为固定的长,声明或者定义了长度固定不能够动态变化,也就是说你不能这么干。我先把这个注销好,我们这样子写一个二。零幺还给他一个二,我们正正常给他一个整形。对不对,给他一个整形,比如说90,这个是没问题的,但是你不能这样写了,说老师我给他再来一个三行不行,这个不允许。
05:06
你看,当我们这样写的过后,890,我们可以看到。我们看看到他能不能检测出来看,果然检测了,他说invalid array index out of Bo of,什么什么三个元素看,Out of Bo就是越界。大家看你out of bus超过了一个范围,为什么呢?因为你这个地方是三个元素的一个数组,但是你给到了第四个元素,对不对?所以说长度是固定的,不能动态变化,你不能说我生命的是三个元素的数组,但是呢,我却给他了。四个元素,这是不允许的,OK,这一点请大家注意,这里再写上。长度固定,不能动态变化。否则报越界。OK,否则报越界。OK,这个我不用,我不用去运行。
06:00
啊,其实你这已经编译都已经错了,你你也运行没有意义了,运行也会报错,运行也会报错啊OK,好,这点请大家注意一下。好,我们把这里呢,给大家整理到笔记里边去。好,哪个地方会报错的,我们把它列出来,故意故意让他标红,好吧,故意让他标红。好,我们故意。那这个红色的出现。好,两个地方都出现了,好吧。我们把它整理到咱的笔记里面去。Okay。整理一下。首先我们刚才已经分析过了,这个地方会报错。是吧,这地方会报错,报错的原因就是因为数据类型不统一。对吧,这里保证因为。因为宿主宿主的类型。宿主。数组的类型。
07:01
是int类型的,Int型的你就不能给什么,就不能给。这个小数。啊,而且而且我这强调一点啊,假设你这是INT32的,你也不能给一个INT64明白这意思吧。就是说即使是int类型的,它也要区分,因为我们知道我们有INT8,有INT16,有这个INT32,有INT64,就是即使你是int类型的,这里面也要细分。这点请大家也要注意哈,就说int类型本身它还有好几种吗?那里面也要分开的,说你不能把一个int,比如说你你你这个数组是定的英特三二,你就不能给,不能给一个英特六四的数据,那个那个变量给他理解吧,它也是要分的,然后呢,这个地方。原因是为什么?因为数组不能动态增长。宿主不能。动态。动态增长。
08:01
镇长好。好,这是这两块,我们先把它放到我们的笔记里边来,这两块非常重要。OK,放好。好,这块请大家注意哈,注意嗯,那么我们来看第二个细节,第二个细节呢,就是有些同学说,老师我有看到有人这么去定义一个数组,就是AL里面这个中括号不写大小。注意,如果在我们这个勾浪里边,如果它前面这个中括号没有写大小,那么我告诉大家,这个AL其实不是数组,而是切片,叫SL。那么这个LA切片呢,我们在后面专门讲解,因为切片跟我们的这个数组区别还是非常大的,因此我在这放这讲解呢,意义就不是意义就不是特别明显了,所以说我这个呢,放在后面去专门讲解,请大家不要着急,为什么我这要专门说这句话呢?因为在。
09:02
很多的,这个其他编程语言里面,它在定义数组的时候,其实是前面不用写大小的,对不对,但是呢,Go语言里面它是要写大小的,因此我专门的提一下,就是考虑到有些同学有一些别的编程语言的基础,我专门提一下,注意在勾浪里面,这个其实不是数组,而是SNS,就是切切片,切片后面专不讲解。再看第三个数组中的元素可以是任意数据类型,包括值类型和引用类型。也就是说,数组这个位置。这个地方。就是我现在高亮的这个类型,既可以是基本数据类型,也可以是也可以是什么,也可以是引用类型。但是我们要说的一句话就是什么呀,但是老师这专门提到了,但是不能够混庸。就是刚才我说的什么叫混庸呢,说你这定的是什么类型。你这定的是什么类型,那你只能放这个类型的数据,你就不能一会儿放int,一会放float,对不对,这个地方其实第三点这个细节在前面老师就已经提出来了。
10:10
已经说到了,只是在这呢,专门的在罗列出来,能理解哈。呃,其实第三点,其实在第一点我已经说过了,只是在这在系统的把它提出来一下好的。这是前三个细节,我们再来看第四一个细节,跟上老师思路,第四个细节呢,是数组创建以后,如果你没有赋值,有默认值,这个是不是我们在上一讲已然给大家讲过了。对不对,就是这个数组定义好了过后,你没有负值,其实它各个元素已经有默认值了,这个默认值就是它的零值。林子这个这个零。这个林子,那么磷脂是怎么来分配的呢?各位数值类型的。默认全为零。也就是说,如果你是in特尔的或者float这个系列的,那么全部为零,如果你是字符串数组呢?默认全为空串,还有如果是布尔数数组,那么你默认就是。
11:07
Force,那那这点呢,我给同学们整理到这,举个例子。注意听好,我整体往这边挪动一下诶。这个地方我稍微的往下拿一下啊,它有时候这个地方会出问题。往这边挪动一下。那我给大家举个例子吧,同学们看一个案例。我们还是以这个为例,好,我们还是以这个为例,呃,因为这一块呢,呃,那这块因为有错误的东西,我先把它怎么样,把它整个先注释一下好不好。不然的话,我下面就没办法没没办法给他演示了,所以说我先把它注释一下好吗。好,我们再看这个细节,什么细节就是刚才老师说的这个东西。数组创建后,如果没有复制,默认为零字。那么零值它的规则是什么呢?我们来写一写数值型的。
12:01
就是数值的,不管是不管是整数的还是小数的啊,就是整数型的,整数的,整数系列的。还有这个小数系列的或者浮点数系列的都可以。浮点数。浮点数系列的。对吧,那么这些呢,它默认都为零。第二个呢,如果你是字符串的,对不对,字符串的,那么字符串的呢,它默认是什么,默认是这种空串,第三个如果你是,呃,如果你是什么呀,就是我们说的布尔的。布尔类型。不。布尔勒。布尔类型的。那么布尔类型呢?默认是什么呢?就是它的领子就为force。那我给大家举个例子,大家体验一下,比如第一个数组我们来了零幺,那这个时候呢,我给他来三个吧,好不好,就float。FLOAT32。
13:01
好,那么我们再来一个202,我们也给它来三个啊,这边最好是把它空开。的公开。那么这个类型呢,我们给它来一个实数类型的,我们再来一个数组,203也是可以存放三个数据的数组,那这块呢,我们来个布尔。OK,那么我们分别把这几个输出来一下,大家看一眼。Print f。好格式化一下输出,比如说201等于。对吧,我把它输出一下零二等于,然后零三等于。分别把它输出。那就是201。202。203注意,嗯,我在这呢,直接用这个数组来来输出的话,它就会找到数组的首地址,然后把整个数组的数据全部给你输出来。是不是在前面我们讲数组在内存的布局已然说说过这个特点了,是不是?好朋友们,我们来运行一把这个,来吧,打开我们的地盘。
14:10
Go project找到我们刚才写的这个CHAPTER06里面的details,输入CD。然后呢,在这里我们go round1下来一个面点go回车。回车,我们可以看到的确如此,大家看这里。是不是000这边是空串。空串看不出来嘛,就没办法了,然后false false false OK,这边是空串啊空串好,这就是这个结果,好同学们,关于这个细节呢,我们就给大家说到这里。这是我们讲的第四个细节。这个也很重要。好,我把这一块呢给同学们拿到笔记里面来。没问题吧,还是比较简单,我们再来看第五个细节。
15:02
那第五个需要同学们注意的是数组使用的步骤是它的步骤是这样子的,第一个要声明数组并开辟空间,就是说在你定义数组的时候,其实这个空间就已经给开辟了,大家还记得吗?就说宿主在在这在做这个工作的时候。其实你的数据空间就已然给你分配了。那么你你只是你没复制而已。没有负值,它是零值嘛,这点大家注意,第二,第二步呢,就应该给数组各个元素赋值,当然有些同学说老师我不赋值,不赋值就是默认是零值。不复值就是默认零子对,默认是零子。默认银子。林子。这个零好,默认是定值,第三步就是数,使用数组对吧,使用数组就是通过下标来访问到我们数组各个元素,就这样子的,好,这是第五,第五个需要给大家。把这个细节和注意事项捋一下的。
16:03
好,同学们,那关于我们数组的,呃,第一部分前面五个细节呢,我们就先给大家介绍到这里。
我来说两句