00:00
我们来看一下切片使用的三种方式。三种方式,这三种方式呢,要求同学们都必须掌握,我们来看第一种方式啊,各位同学看第一种方式。呃,第一种方式就是定义一个切片,然后让切片去引用一个已经创建好的数组,比如说前面的案例,我们就是这样做的,大家看这里。大家看这个案例。前面我们写了这么一个案例,看这里这个地方呢,是一个已经创建好的数组,对不对,然后呢,我用一个flash去引用这个已经创建好的数组。这个是第一种方式,第一种方式呢,因为前面我们已经讲过了,所以说这个地方我们就不再举例了。第二种方式,我们来看一下第二一种方式,第二种方式呢,是通过一个内置的函数叫make。来创建欺骗,就直接创建欺骗。
01:00
你比如说我这里写了一段代码来看VR slice。切片类型。大家还记得刚才我们在讲第一天的第一第一节的时候,我们就说过,切片的数据类型应该这样写,中间不要写任何的数据,然后后面有个make make里make有三个参数要填,第一个参数是切片的类型。切片的类型。对吧,这个地方我就不再多说,第二个呢是切片的大小。就是它的大小是多少,那第三一个参数是你指定这个切片的容量是多少。就这么简单,那么当你进行一个make以后呢,这个切片就被你创建好了,在默认情况下,切片里面的元素的这个默认值全部为零。待会儿呢,我们可以输出来看一下。长度还有它的容量也就有了,你要去访问一个切片,或者是去修改切片里面的值呢?可以通过切片名访问下标名的方式来访问我们的切片元素,从而去修改它这里面的值,那比如说slash,零。
02:19
这个就是返回到切片的第一个元素slash,二就是返到切片里面的第三个元素,OK,好,这个就是我们切片的第二种用法,叫做make。大家看这里写的很清楚,基本语法是VR切片名,然后这是type,就是类型make make里面呢,第一个填的就是我们的这个切片的类型。这地方应该还少了一个东西啊,这少写了一个type。这个菜必须加进去,嫩是切片的大小。这个。Capability呢?这个CP就是它的容量,容量是可选项,我们来看一下手册,我们打开手册看一下make函数。
03:05
Make是一个内置函数,我们打开它。Build in里面有一个make,大家看这里。Make内建函数make分配并初始化一个类型为切片或者映射或者通道的对象,也就是说make呢,不但可以去创创建切片,还可以创建map或者通道,对吧?第一个参数为类型。类型第二个参数为size,就是大小。二是大小,下面呢,这也写的很清楚,看到没有size指定的长度,该切片的容量等于其长度,切片支持第二个整形参数,用来指定不同的容量,就是第二个参数,就是这这个地方。你比如说它这去注意啊,如果你指定容量,它必须不小于其长度,也就是说容量必须至少大于等于长度,能理解吧,这个应该很好理解,你容量为二,你长度为三,怎么怎么可能呢。
04:05
因此你看这地方写了个make这样一个类型,这是什么意思啊,就是说分配一个长度为零,容量为十的切片。容量就长度为零,就是说现在目前目前这个呃,里面还没有一个元素,但是它的容量就最多现在可以放十个,能理解吗?好,这就是make这个内置函数的介绍,那么我们来举个例子。第一种我就不举例的同学们,第一个呢,因为前面我们已经讲过了,对不对,我就不举例了,但是呢,我还是板述一下。切片的使用。切片的使用来跟上老师的思路。我们来一个标题二。方式一,整理一下,这是第一个方式案例,我们还是板书到这里吧。这是我们的第一个案例,前面已经讲过了,不再多说,我们再来看方式二。方式二,这边呢,咱们也有一些说明,我把这个进行一个板书。
05:03
好,这是我们的方式二,方式二里边呢,提到了用make内置函数来解决的,如果这个方法大家还不理解的话呢,可以打开我们的这个手册去看一下这个make,好吧,Make函数也比较简单,呃,那么看到它的基本的语法呢,是这个样子的,我把它弄成一个蓝色的字体。好,参数说明也说了,第一个type就是数据类型,那你就是大小,CP就是容量可选,你也可以不写,但是如果你写的话,有个要求,这里需要注意一下啊,就是CP如果写了。如果你配,呃,这个分配了写了啊或者分配。分配了这个CP。那么则要求。则要求什么呢?CP至少要大于等于呢?否则这个语法是错的,那么我们来举个案例吧,同学们,我们举例说明一下这个。
06:02
Make方式来创建切片的用法,打开我们的Vs code。Code,好,我们新建一个slice这个DEMO。新建一个文件夹。新建一个文件夹来走一个,我们就叫做slash的使用。它的use,好吧,Use好,我们新建一个文件叫man.go。问,顶购,然后呢,为了方便一点,我把前面这一部分拿过来为我所用。好,那么我们演示。演示切片。切片的make方法使用使用。好使用的时候呢,这个地方我们用的是make方法。对不对?好,那么我们来一起做一做,比方说我这里呢,有一个切片,我们来看一下切片,我起个名字叫slash。
07:01
然后类型是一个int或者是一个float吧,这是我们写个float float64。没问题吧,然后呢,直接make。你也你也可以,你你也这样子啊,你也可以这样子,写完了再再make也行,也可以直接make,我们这个幻灯片里面是怎么样直接make的。直接就make了,这个也是可以的。Make等于make啊,如果你不make直接用要出问题啊,同学们,我给他演示一下,如果你不你如果啊,注意听。我我注意大家说一下,如果你这个是一个数组,你这样就可以用了,但是如果是个切片,你不make,直接直接要出问题,我注意一个细节啊,对于。对于切片。对于。对这个切片而言。切片必须make后才能使用。实用,你你不能这样用啊,同学们说老师我这定那个切片我直接用,那你直接用你试看这个,这有什么后果。
08:04
我们直接来打印一下这个,我们这样LN,我们直接把这个代输出。同学们看一下,这有什么后果?我们直接这样运行。CD点点二,然后CD到我们的这个flash的右。好,然后呢,Go run,我们刚才写的面点go,我们看一下会提示什么信息。我们可以看到什么都没有对吧,所以说你这是没有任何东西的,没有任何东西,那么这时我们要make一下的话就不一样了,首先make的时候先把数据类型写在第一个参数。第二个参数呢,我们给他,比如说我给他分配。认识五个五个大小,然后呢,容量我为十好,这个时候大家看我在输出,你们觉得应该输出什么信息。来,跑一个。跑起来,我们可以看到此时此刻,大家看到是不是有五个元素了。
09:06
五个元素都为零,因为你没有给它改变值,它默认就是为零的。它的容量是十,但是呢,它目前因为你没有给他任何数据,所以这这五个元素呢,都为默认为零,那我们修改它一下。我们修改一下,比如说我把slash的第二个元素负一个十,Slash的第四一个元素负一个20。大家想一想,这个时候是什么一个情况,如果我现在运行,你们可以看到对应的元素的值就发生变化,大家看这里。一个是十,一个是20,没问题吧。好,那当然它的这个slash的slash的容量和大小呢,咱们也可以输出来给大家看一下print。Print。好,Sli sli的这个size等于我们输出来嫩,然后呢,Sli。
10:05
再有它的容量,我们也可以给他打出来看一下,它的容量呢,我们指定的是十。对不对。用CP。好,这样就是它的一个基本使用。跑起来。大家看情况。你看五是它的大小,呃是它的大小,十是它的容量,那么我要问大家一个问题了,我请大家想一想,如果我们这样去使用这个slash的话,在内存里面它是怎么存在的呢?如果我要求大家画出此时此刻这个slash的内存图,内存布局图,你们能不能画出来?你们能不能画出来,注意,我现在给大家说一下这个图对应的内这一段代码对应的内存图应该是怎样子的。来看一个。我把这段代码呢,也给同学们放到Excel文件里面来。
11:00
因为我们前面已经对slash做了一个说明,所以说我这块呢,我就偷一个蓝,我直接呢,就把这个地方已经用到过的这些图片,我拷贝一份到这下面来。好,我放到这来啊。我整体往下移动。好,往下面挪一手。挪下来了啊,大家看我,因为我我不想重新再画一次图了,再画图太累了啊,那大家看此时此刻这个切片目前是什么样子呢?好,首先因为你这是直接给了一个切片,所以他就这样子指定了。他还是指向这个空间,但是此时此刻这个地方是多少是五,这个地方是多少是十。是不是他仍然指向一个。包含五个元素的一个空间,那这个元素呢,目前的情况是第一个是零。
12:02
第二个元素是几?第二个元素是十,第三个元素是几?是不是又是零?第四个元素是几?是20。第五个元素是,解是零。好,此时此刻,这个元素肯定是指向第一个的。因为因为你不是用的切不是直接用的,别引用的别的数组嘛,你是直接指向这个这个数组,这个数组的第零个元素啊,就是这样子的,相当于是这个意思。好,我把这个往前面挪一下。是不是这个意思啊,诶。往这边挪一下,它指的是第一个元素,当然此时此刻最大的不同是哪里呢?就是不会再有一个数组指向这个地方了。那这种大家有有没有看到区别。大家看到有什么区别没有,此时此刻这个空间。不会再有一个数组指向它,也就是说,这个空间的数据只能通过slash来进行访问。
13:00
而这个数组呢,对外是不可见的,再说一遍,这个数组对外不可见,也就是说程序员呢,只能通过slash去操作这个了,而不能通过数组名去操作了,因为它是这样一个结构。这个跟前面最大的不一样是,你原先这个空间既可以通过slash去操作这里面的元素,又可以通过数组去操作,操作这里面元素对不对?但是当我们用make方式来做的时候,其实我们能够访问到这里面这个数据的。这个具体的这些数据的只能通过slash的下标去访问的,那换言之就是说我们这个数组。内部这个数组其实。是对外不可见的,这个数组你就直接只能通过时代时代底层的维护了。能理解这个意思吧,相信大家应该能够理解好,这个呢,就是我们这个图,这个这个代码对应的内存图,大家看清楚了。
14:01
大家想一想,这个跟前面有什么不一样啊,好的,我把这一段图的内存布局呢,把这个内存布局给大家。板书一下。好,我整理到这里。没问题吧,代码也非常的简单,非常简单,注意这个图跟上面图的区别在什么地方?待会后面我们还要把它整理,整理成几句话啊,整理成几句话,注意这个不一样的地方,我们可以总小结一下。对上面代码的小结,我们注意它们的区别在哪里?我这里就说这么几点。第一点就是。通过make方式啊。通过make。Make方式创建这个切片。切片可以指定指定数,这个切片的。切片的大小和容量。
15:02
容量对不对,第二点如果如果没有给什么呢?切片赋值切片。的各个元素赋值。那么默认就会使用默认值。默认值是什么呢?比如说int类型的float这个系列的通通都是零。这些呢,他们都是零,那如果说你是什么呀,你是十寸类型的。如果你这个数组类型是实尊类型的,那么他们的默认是空的字符串。如果你是布尔类型的,同学们如果是尔类型的呢?它默认为false。这点请大家注意一下,还有第三点,第三点就是通过切片。通过这个make方式创建切片呢?这个数组底层是由make来维护的,对外不可见。通过。
16:00
通过make方式创建的这个切片。切片对应的这个数组是由是由谁make底层维护。是由它的底层维护。李春。底层维护啊,对外对外不可见。不可见。不可见,也就是说你现在只能通过slash去访问它的这个数据,明白吧,即。及只能通过slash去访问访问这个元素。各个元素。好,这就是老师给大家总结的关于刚才用make方式去创建数组,创建切片的一些总结,那我们来看还有一种方式吗?再看第三种方式,切片使用的第三种方式,切片使用的第三种方式是这样子的,再定义一个切片时,直接就指定具体的数据类原理,类似于make这个图我就不画了,我就直接告诉他怎么用,你看啊,大家看这里。
17:10
这个也是个切片slice。他直接就把这个数组,把这个切片对应的数组。直接给他了也没有用,Make没有用,Make直接拿过来给他了,这个也可以。哦,这个也可以来吧,我们把第三个方式呢,也给同学们整理一下,这是第三种方式,那为什么说老师要把这三种方式都要给他介绍呢?因为你将来在工作中。这三种方式都有可能用到明白,那我们来一个案例演示。后面我们都有项目啊,同学们基础你没有打打牢,打牢的话项目你也理解,理解起来肯定是不会到位的,如果没有这样一些最本质的东西支撑,那你写代码也是写的肯定是不到位的,要么写的效率比较低下,要么就是自己也不知道为什么这么写。
18:03
项目其实本身并不难告诉大家,你只要把老师讲的这些东西都理解了,看一个项目跟玩似的,我就看,我就这么告诉你们。对不对,所以说你看不管是哪个大学,真正的好的大学啊,包括真正好的公司,好的公司,其实别人就是问你什么呢?最底层的,比如说像像像这百度,或者是像这个谷歌,一般来说他都是问这种算法的东西偏多,就是问底层的东西偏多。那问你项目这一块呢,没问题,你基础只要老了,项目这一块,包括我们后面老师讲的项目,你听起来是非常轻松的一件事情,能理解。好的,我们来举个案例。呃,案例呢,我就直接写到这里了,就是使用这种方式来给大家演示一下第三种方式,直接上代码。非常简单,这样子VR我就偷个懒了啊,同学们,这次呢,我们换一个时钟类型的。
19:00
好,直接十寸,那么我这里也不去用make了,直接给他分配,比如说我这样写。中国直接分配。汤姆。Jacky。好,Mary。Mary写完了,你爱写多少就写多少。好的,那我们这个时候就可以来看看他的数据情况是什么样子,Print。啊,那这个因为有两个名字,我就只能写,我叫这样写吧,叫做十寸切片好吧,十寸切片。取个别的名字。好,它的内容是什么,我们把它输出来。那么我们同时呢,也把它的大小和它的这一个容量输出来给大家看一下,你们可以看看它是等于多少,一个是嫩,这个嫩的话比较好好理解,就是它肯定是返回一个三嘛,这地方应该应该是返回三,那么这个capability。这个是多少呢?我们来看一下。
20:02
Job。好,我们看看这个东西等于多少。是不是也等于三或者是等于其他的呢?运算一下,为了好看同学们,我们来给它一个换行。好代码。大家看这里面有什么地方错了?他报了一个错误啊,单词写作。这个另外是P大写的。对不对。保存一下。这个时候没毛病的吧。我们来运行一下,同学们请看效果。我们跑起来过后,我们可以看到,诶大家看这里,你看。数据就是这么多,而这个时候它的大小和capability,因为你没有指定它的大小和这个,没有给他这个capability,它就是等于三。看到没有?它就等于三,它就是等于三,就等于三嘛,这个无所谓啊好,我们现在还没有去讲细节,现在还是讲的些基础的东西,对不对,所以说细节的时候,我们还会告诉大家这个capability它会怎么自动的增长。
21:01
那关于第三个应用方式的代码,我们也把它放在笔记中去。好,同学们,那到此呢,我们就给大家把切片的三种使用方式全部讲完了。诶,为什么这种是这个标题,这个标题就不对。好,这个标题刚才写错了,这个标题应该是这样子才对啊,我们三种方式全部给大家介绍完毕,希望同学们每一种方式都要掌握好吧。那关于这块切片的使用,呃,三种方式就先给大家介绍到这里。
我来说两句