00:00
好,同学们,现在呢,我们来接着看最后一个需要注意的地方,就是gro中这个它的一个panicle的一个补货。那么大家看到啊,如果我们在一个携程中使不使用这个recover,那么它会出现一个什么情况呢?就说如果你在一个鞋子里面出现一个盘口,会导致整个程序崩溃。那有时候呢,我们有两个携程,如果有一个携程,他他崩溃了,我们并不希望他影响到别的携程,这这很正常对吧,我举个例子,我举个例子,怎么去控制这个问题,解决这个问题啊来我们看看这个细节怎么说。就是隔中使用recover可以解决携程中出现的panic口导致程序崩溃的问题,我举个例子,好,我们就在哪里改呢?我们新建一个文件,新建一个文件夹,叫做我们的DEMO啊,DEMO03。单位零三写一个文件命顶勾。
01:03
好,然后呢,我把这一部分通用的代码先拿过来,大家看一下。啊,大家看一下,比如说现在我有两个斜程啊,两个两个函数吧,跑起来才是一个斜程啊,有两个函数,第一个函数呢,是每隔一秒钟输出一个hello word。啊输输输十次啊输十次走叫我们就写个叫C哈。Say hello。好,然后呢,它这个呢是呃,循环十次,然后输出这个hello word,那我这样写啊,For I。等于0I小于这个10I加加。然后呢,他休眠一秒就输出一句话,Hollwood啊,他休眠一句话。好,我让他休眠一下。那么就是time点儿sleep。对,然后呢,Time,呃,点second,对,然后呢,我们说出一句话啊,For mind,然后hello word就行了。
02:09
实距,那么另外呢,我们还有一个函数,哎,我们还有一个函数,比如说这个函数呢,我们叫test。这个函数做了一件什么事情呢?他做了这么一件事情,他先去定义了啊,它定义了一个切片啊,一一个map吧。怎么写的呢?比如他写这个my map。My map,然后呢,这样用了啊,他写了一个int,然后呢,它的值是十寸,上来过后这个人呢,使用错了,他上来过后写了一个零,然后给他了一个值。叫什么呢?叫做勾好同学们知道这种写法应该是错误的,对吧?但为什么是错误的?因为我们的麦谱是不是应先make一下呀,但是他上来就能用这种用法呢?显然是错的。这是错的,那么如果说我们没有这样控制,同学们看到啊,我启用了,比如说我购了一个。
03:06
我购了一个say hello,这个携程。然后呢,同时我又够了一个,就起了一个test,这个携程好,同学们可以看到这时。你会看到。虽然。他什么意思?哦,Map map前面就忘了一个这个东西。啊,忘了一个这个东西啊,就说。就是说这样子会怎么样呢?本身你这块其实是没毛病的,但是因为它报错了,导致整个程序崩溃,好我们来看看是不是样子的呢?CD点点CD的DEMO03。来,各位同学,Go wrong,我们的命点够,跑起来大家看一下。诶,这么为什么啥都没干就跑出去了。哦对,我们我们这儿还要还要还要休眠一下,我们当这个主函数也也打东西啊主函数,主函数这边呢,也输入东西,比如主函数每隔十秒也输出一句话,比如说I。
04:07
I小于十爱加加,因为刚才这个问题是他都还没有机会执行,主主先生就跑跑路了,对吧?哎派呢,那我们我们来玩一下啊,同学们看到那这那叫主函数里面呢,它也在说,它也在说这句话,比如说叫做OK。然后呢,把这个输出来。那么它也是每隔呃也输出十秒吧。把这句话粘过来。好的,先看一下代码。同学们先看一下这个代码目前是什么情况走。好,同学们看到,大家看这个主函数,主函数输了一次OK过后立马就崩了,为什么这个崩了呢?同学们看到在这里在第19行。第19行他告诉我们,他说有一个panic发生了,为什么发生呢?是因为你分配了一个,就是你分配了一个值entry嘛,ENT不就是键字段的意思吗?然后呢,你给它了一个near,把这个键字段给了一个near,那当然报错了,但实际上呢,同学们想你不应该啊,就说我我这个是没问题,我这个也没问题,那么实际上在开发中呢,我们是希望有这样一种机制,就说如果你有一个写成这个出了问题了,那么你你不要去影响我。
05:30
就不要去影响我的这个携程和主主线程的执行,那这个时候怎么办呢?各位同学好,非常非常简单啊,把我们原先讲的那个错误处理机制引进来就可以了啊,这里为了防止啊,这里我们可以使用这个错误处理机制就是recover来解决。啊,对。Day份加discover。得份加这个recover recover recover来解决。
06:02
Recover,好,那同学们cover Co来解去,好,非常的简单,Different一句话,然后呢,写一个匿名的函数,对,写个匿名函数写到这里来。那写到这里干什么呢?在这里面我可以去捕获这个抛出的盘口。捕获。啊,捕获这个test抛出的,啊,抛出的这个panicle,那怎么捕获这个问题呢?非常的简单,我们前讲过IF1句,啊IF1句,我们直接用这个recover来捕获。啊,Recover,呃,大家还知道这个recover会返回什么东西啊?Recover,它是不是会返回一个A值啊?是范为一个A值吧,大家应该还有印象,那么我用这个recover来解决它recover,那这个时候如果这个A它不等于near。就说明的的确确发生了一个错误,对吧,然后呢,这个时候我们就处理一下,说诶test发生了,Test这个地方携程test发生异常了。
07:11
发生错误了啊,发生发生错误。发生错误。好错误,那一旦发生错误的话呢,也简单,对不对也简单,那我就干什么呢,把这个错误拿出来就完了,所以这个就叫补货,那一旦补货了过后呢,你这错了我也没什么影响好对吧,有哪里写错了。哦,少了一句。这个是不是因为你要调用嘛,这是匿名函数的调用,要打一个小括号,如果这是参数啊,你还得传参数进去,好,同学们再来看一下效果,诶这就不一样了,同学们看。哦,他说太子的发生错误了,但是呢,你看我的两个输出仍然是正常的。我的两个输出人是正常,你看退出去了完事,好这样子的话呢,你这个发生错误了,大不了就说你在这发一封电子邮件,你发一个三,把这个电子邮件或者发一个预警给给管理员说诶管理员知道有一个携程有问题了,诶你就赶紧去处理就行了,说这个机子呢,在我们开发中也是用的比较多的啊好这块呢,我把大家板输到我们的代码里面去。
08:19
好,具体来说就是刚才我们说的这个问题啊,如果我们起了一个携程,但是这个携程出现了盘离口,如果我们没有捕获这个盘口,就会造造成整个程序的崩溃,这时我们可以在gro中使用recover来捕获panicle进行处理。这样即使这个携程发生了问题,但是主线程仍然不受影响,当然其他携程呢,哎也也不会受影响啊,比其他行程还是可以正常执行,好可以继续执行,这样就非常不错,好我把这个代码呢给各位各位朋友放到我们的笔记里面去。好的,来各位同学我们放到这来,然后呢,我把它的这个代码啊,代码实现写。
09:06
代码实现好的各位同学,那现在呢,我把它整理到咱们的笔记里面去。这又是一个细节。好了,同学们,那关于我们这一个growth和China呢,我们就先介绍到这里。
我来说两句