00:00
好,各位同学,那么我们来接着讲这个管道,那管道的基本用法有哪些呢?首先我们来看一下管道怎么去声明,看这里案例,它的基本语法是这样子的啊,VVR这个变量的名称就是管道名,然后串这个can呢是一个关键字,就不能改,后边是我们的数据类型,表示这个管道放什么样的类型,比如说下面几个案例。比如说我进这个v rit char,那么这个地方呢,就表明这个R是用于存放int数据的。啊,用来存放数据用数据的,再看这里面有个案例map圈,这个呢是一个管道的名称,它可以存放的,在这个管道里面存放的类型是。这个类型什么是一个map,就说我这个管道里面可以放什么呢?可以放很多很多的map。啊,这个也很有用,后面待会我们出的题呢,就会用到这个知识点,第三点我们再看,哎,除了这个东西,我们能不能放person呢,放个结构题呢也可以,就你也可以放结构体,那么除此之外呢,我们还可以放结构体的指针也都可以啊以以队列的形式来放的,各位同学,那么所以说还有1.china是引用类型。
01:17
China必须初始化才能写,写入这个数据即make后才能使用,就是你不能说我没有make,我就直接往里面放,那是要出问题的啊。第三点,管道有类型,Int里面整放T,好,这是它的基本介绍,我们就基本的定义,我们就说到这儿,然后呢,下边我们来走几个代码。啊,基本的一个。啊,生命好,给他一个标题三。给他一个标题三,我这里做了几几个概念,第一个就是它的声明的语法,还有它的举例。举了几个案例,然后呢,有一个说明。好,下面呢,我们接着看下面再一个幻灯片,看这里初始化。
02:01
那么如果说我们使用这个China时候呢,一定要用一个make。你如果不make这么时候报错啊,好,现在我们来给大家用一下,打开我们的VS,我们来用一下。好,这地方我们讲的是管道所说新建一个文件夹叫channel DEMO,好跟上思路。然后呢,我在这里面新建一个文件就可以了,没点够。好,来看一下package。Package主包,然后呢,Import。好,Form,然后我们写一个组的函数命。来看几个案例啊,同学们,我们来演示一下,演示一下这个管道的使用,管道的使用。好,假如现在我们有个需求干什么呢?就是呃,创建一个,创建一个可以创建一个可以存放,存放三个三个int类型的类型的管道,管道它要求很很重要,三是代表大小,Int代表类型,那现在怎么创建呢?非常简单,先声明啊,当然也很一步到位,就是我先写个int串,然后呢,它的类型是串。
03:17
然后呢,Int好,这第一步,这叫声明第二步int。等于make什么玩意儿呢?类型,类型就是然后int,然后写上一个三。好,这个呢,代表我可以存放三个啊,这就写完了,那写完过后呢,我们来看看这个它到底本质是什么东西,我们来看看就说看看。我们看看这个券是个什么玩意。是什么是什么,那么我们打印出来它的值,如果它是个地址,就代表它其实是个引用,指向了我们这个队列,这个空间,所以说你要理解一下print f,好,我们来看看int的值。
04:01
来,我们把这个纸打印出来,打印出来V好,那么我换一行直接T圈好,我们看一下它到底是一个什么玩意,执行一把CD,点点CD点点CD到我们刚才写的参DEMO go run main点勾跑起来,看到吗?哦,我们一看见,诶有点意思,我们发现这个家伙是个地址,那你可以怎么理解这个,呃,管道呢,一完全可以这样理解,好,你可以这样,你说哦,这有个例子,那这个例子怎么理解它呢?就好像是在我们的内存里边,我们有一个这样的东西。有一个地址,这个地址呢,呃,有一个名称叫channel in。好,这这样理解啊,Inter这个inter呢,它指向了一个,它指向了一个地址。哦,诶,这地方。
05:01
再给它填一个颜色进去啊。添一个颜色进去,相当于说我这里指向了它。我指向了它,而它,而它又指向了我们这个真正的管道受敌者。那它会选用这个地方,这样理解,当然了,那既然你这个channel它是一个例子,它本身它本身也应该有个地子,那也可以把它查出来啊,我就讲一次,他说China本身呢,它还有地址,China in特本身的地址。本身的地址,这个地址呢,你也可以把它打出来,比如说百分P,你看我们这样取,能不能看到它地址I的无in圈。好,我们玩一把,好起来,好起来OK,那这个时候呢,我们可以看到啊,我们可以看到它这里面还有一个例子。而且你们可以看到这个地址和前面的地址不一样,那就应该怎么理解呢?可以这样理解,就说在我们的内存里边,诶,我们这个地方还有不是。
06:05
OK,你看这样。对,它这里面这个是存存这个地址的一个空间,还有一个例子让它怎用它,那既然它是这样一个引用,引用关系,同学们想一想,各位同学,那么待会我们就能理解为什么我们在传一个China字的时候,你传到一个函数里边去,它其实是操作的同一个全能本质就能理解清楚。如果我不给他把这个图拿出来,对吧,你说为什么呀,为什么我们channel把一个channel这个传给另外一个函数,在这个函数里面操作的是同一个管道呢?原因就在这个地方,因为它是引用类型,这一点是说的很清楚的啊同学们好,那这个关系完了过后,我们接着往下看,那既然你有这个东西,那么我们就可以往里面存放东西了,来。走,往里边写来看一下,向管道写入数据。
07:06
向管道写入数据。谢入。写,那么写入数据的时候呢,非常的简单,它是这样写的啊,当你刚开始可能有点不习惯。他这样写的。看到没有,这个叫这个箭头啊,叫写入符啊,写入符一个叫读取符,一个叫写入符,这个反正大家看一下也也很形象,就什么数据,像这个管道流入就追屁股后面追加嘛,就跟刚才那个想的一样,那我放一个什么呢?放一个词,这就写进去了,说老师这是一个具体的常量,我们能不能写个变量呢?当然也可以,比如说你有个number,注意听讲啊number,比如说这个值呢,是211,好,我可不可以这样放呢?当然可以211,哎,不number这样也可以放,就相当于是放了两个数据,你怎么形象理解啊,就相当于说在这个管道里面放了一个值,又放了一个值啊,当然后面这两个数就现在还没有啊,还没有好,这样子就有了,有了过后呢,同学们我们再来看,再放一个啊哦,我们我们看一下它的长度。
08:15
这个时候我们来看看输出,是看看管道,管道的这个长度和它的CPCP是它的容量。这个容量各位同学,容量一般来讲就是你在make的时候是多大就是多大,它一般不会中在增长。注意听好管道跟我们原先讲的那个什么玩意儿,Map那些不一样,Map它可以自动增长,你这个管道可不能自动增长啊,所以说我往里面加,加多了怎么办,加多了自己就爆了,爆仓了直接报错了啊,这个是容量,我们打出来看看。看一下啊,同学们,Form might点管道的东西啊,说多呢也不多,但是说少也不少啊,看它的嫩,它的长度打印出来嫩。
09:02
啊,应该等于百分V吧,打印出来看一下,看看长度。好小N,嗯,还有它的这个CPCP是容量啊V来看两个,这两个值嫩我们的这个int。好,再看它的容量CP,那么这个时候应该输出什么呢?应该一个是二,一个是三。好,一个是20根来跑一个,因为我想里面追加了两个数据,追加两个数据来玩一把。跑。好,我们可以清楚的看到啊,它的容量是二,它的这个是三,为什么容量是二,因为你讲的两个数据,为什么容这个容容啊,为什么长度是二,因为你加了两个数,为什么容量是三,因为你make就是三,注意这个容量不会变化。如果你多了,他直接给你报了,他说这个不允许,大家看一下,有个有个细节啊,同学们注意听。
10:02
注意听,加数据的时候最多只能加到三,加三个加多了报错。来看一下是不是这是它的重要的一个特点啊,这里注意一下,注意。好,注意点。注意点就是当。当当我们给,当我们给这个管道写入数据时,写入,写入数据时不能不能超过。超过超过其容量。容量。那么你看我现在写了一个,我再往里面写一个啊。再往里面写一个不会报错,比如说我给他来个50。这个时候你在运行两个都是删了。啊,长度和这个三已经到极限了啊,周老师我再来一个。你再来一个吧,比如说你再来一个98,好,各位同学请看第24行会出现一个什么信息,走,我们看效果。
11:03
各位亲爱的朋友,可以看到报了一个非常恐怖的错误,叫死锁啊,他告诉你有一个better error all groups are sleep的啊,放不进去了,所以说呢,我们这方要注意一下,这个管道是不能够啊,不停的往里面装的啊,要超过这个就行,就错了,那有的老师,那么那这管道不就是最大只能放三个,那多了怎么办呢?多了,人家是这样子的,管道的价值是这样子的,一边放一边取,它的价值在这,你只要取出来过后呢,你取一个又能往里面加了,所以说这个地方要注意啊,同学们,我把它写到这里来。好,那么怎么办呢?取一个来我们看取。取一个啊,这边把这个把它这个基本的原理讲清楚,我们再用,不然的话你听不懂啊,不是说韩老师吃饱没事干就说诶讲这么多干啥,因为我我们有时也学这些东西,学一个知识点,就说你发现没有把这基本的搞懂,我我写了代码,我说诶大家怎么去解决,讲完了根本你你根本没法灵活使用,就稍微变一下,你都不知道怎么用了,说基本知识都不懂的人,你没办法去写了一个复杂的代码啊,再看读。
12:16
看看从管道管道中读取数据。读取数据什么意思呢?就等价于这么一个干玩意儿啊,就说你从这个地方取一个数据出来,当然你从管道里面取一个数据过后呢,里面的数据长度就会发生变化,就减了一个,但是容量不会减少啊,容量不会变,所以说呢,待会给他体验一下这个这个这个取的这么一个动作啊来。给大家演示一下怎么取,取的动作是这样子的,各位朋友。第一种取法,就说我把这个取出来值交给另外一个变量,比如说我有个N2。我现在都按这个套路写啊,N2好,NUMBER2走,等于怎么写这样写。
13:04
Int串,嗯,各位同学看一下这个符符号啊,这个符号呢很形象,就说我从这个int ch这个管道里面取出一个数据,就是推出来一个数据,交给谁,交给number,就这么简单,当你交出来过后呢,同学们想我们推出来这个数据应该是几,大家猜猜是十还是211,还是还是50,各位同学,十显然是十,为什么是十啊,因为我们就是先进先出嘛,先进先出,所以说你们应该可以很新先看到来走一个,看看这个血数据是什么玩意。走好,NUMBER2等于走人,NUMBER2好,取完了过后我们再看一下它的大小啊,我们可以推一推,同学们看好,你取完了,取出来一个过后,同学们看看是不是这个时候又变成二和三了,因为你原先加完了过后这个是三和三。
14:01
你现在有三个数据,你取完一个过长度就变二了,但容量不会变化,OK,好,来看效果。这边看效果啊走。我们可以看到这个结果跟我们想的是一样的,你看啊,嗯,你原先有三个取了一个十出来变二个了,容量发生变化,那么我们在取的时候呢,也有一些限制条件,就是你不能使劲的取。你如果取完了,你还继续取,也会报错,我把这个呢也给大家加进去。第二点啊。第六点第六点在注意听这句话,在没有使用携程的情况下,使用携程的情况下情况下,如果我们的管道数据已经全部取完。全部取出,再取再取就会就会报告什么玩意儿呢,还是这个实数。因为他已经没有了,你还要取他,就认为老在不停的取他,他死在那个地方了。
15:04
对不对,失锁了吗?取不出来没东西,他又不知道,你又不告诉他,他失锁了,好,那怎么办呢?同学们看我来取,取一个啊,我再取一个number number3吧。NUMBER3好,我把这个呢,呃,也取出来走int。Int产。取出来,再取一个NUMBER4。好取出来,那取大家看商业学说,其实这个时候还不会报错,还不会报错,但是因为你没有用这个数据,肯定他会报错的啊,他说你这两个没定义过,没没有使用过。那NUMBER3NUMBER3等于注意啊,NUMBER3NUMBER4各位同学,NUMBER4等于啊,等于NUMBER4各位好,呃,老师呢,把它打打打印一下,这个为什么报错了。NUMBER3,我这写错了。
16:03
40行写错了是吗?啊,这这写错了,对,他说这个没有用过,好同学们看到这个时候还算是正常的啊,那么这个NUMBER3呢,就应该是211211 number4呢应该是五四,看对不对。好,可以看出来效果呢,跟我们想的是一样的,211和五四,但是你再取一次啊,你如果再取一次完蛋了,如果你再取一个五出来,直接报错。在005方零在取五的时候,因为它已经没有了。你因为你看到这地方它写的很清楚,长度已经变成了,呃,长度已经变成零了,你再执执行报错了。好,同学们可以看到在我们这取的时候,他说在你第39行,第39行有一个they lock the lock,这个lock的时候呢,而且写的是can received,取的时候报错了,那就是我们的39行,也就是说这一行报错,因为没有了吗?那你不停的取,你再取没有东西了。
17:03
他自己没有保护机制,这老师那怎么办呢?这个我们再说后面怎么解决啊好同学们,那关于这一个。管道的一个最最基本的读写创建,我们就说完了,那下面呢,必然就是细节,来把刚才讲的这个基本用法给大家聊到这里,小起来啊,郭同学,那么我们这讲了一把。它的初始化,它的存放对不对,它的一些细节我们就讲到这了,来说一下这个地方的细节。就是管道,管道的初始化对不对,然后呢,写数据写入,写入数据到管道。管道还有呢,读取从管道,从管道读取数据,读取数据以及一部分注意事项及注意事项及基本的啊基本的注意事项这个我们就说完,然后把代码呢给大家写到这里,注意事项来聊到这儿啊朋友们给他来一个标题三没问题,那老师把代码呢给各位朋友放到这个笔里面来,好这次我就出过来,直接把源码放过来。
18:20
给它插入一个小表格啊,插入一个小表格啊,颜色不好看的话呢,我们可以给他表格来一个,来一个底色啊,来一个底色很简单。好来个底色啊,底色我们来一个这种颜色。好,这样就可以了,诶怎么没变呢。咦,这个还不变颜色啊,难道?啊,是这个吧,是这个李纹色,对,是这个李纹色才对啊,好可以了。好,这怎么变慢了呢?对,稍等一下啊,截取一段小视频。
我来说两句