00:00
我们接着来再为大家介绍这个China的使用细节和注意事项,还有两点也是比较重要的,OK,那第一点呢,就是我们所说的这个select。那么使用select可以解决从管道取数据的一个阻阻塞问题。那什么意思呢?同学们看啊,我们前面大家记不记得,我们去从一个管道里面读取东西,我们需要。我们需要是close这个管道。如果不可能是管道,你在便利这个管道的时候,它会注射。而且呢,会发生一个失说,但有些情况下呢,哎,你说老师我不想关闭它,我也希望他能够不阻塞,能够正常的退出,行不行呢,也可以,这时呢,我们会使用到一个关键词叫做select,我给大家举个例子,这个呢肯定要写代码的。来,同学们,我们看一个小案例。
01:00
好,这个呢,我们写一个DEMO02,就是细节里面的DEMO02,各位同学好,我把它呢新建一个文件命go。OK package。主,然后呢,Import对不对,诶然后呢,我们写一个主函数写完了,那现在呢,我们要讲的细节就是它。吸引它,那为了讲解这个呢,我们先来第一步,先定义定义,对定义一个这个管道,假设管道呢,有三个数据,有五个有有十个数据啊有十个数据,我要定义两个管道。十个数据是类型的。再定义一个管道是字符串类型的。我定义两个,待会你们看到这个还是比较有意思的啊,有时候还确实需要它再定义一个管道是五个字串。五个数据啊,然后是做串的,我这样写。
02:04
好,这个就写完了,那写完过后呢,我们开始玩一把,第一个我就直接这样写了,In the channel。In。然后呢,我直接给他开这么一个空间啊,Make一个make一个什么呢?Ch in,对十个数据,然后呢,我就直接往里面扔十个数据进去了,For循环I。哎。从零开始,I小于多少呢?10I加加好,非常简单,然后我们现在呢,往里面扔的话,就这样子劝。走。呃,哎,就就放这个吧,零到九写完了,在紧接着呢,我们在定义五个数据,叫是字符串的这个数据,呃,那么这个也很简单,寸。扇对,然后呢,贝啊贝扇里面呢,我们放字串。
03:01
当然放五个数据啊,为什么这样子说呢?待会我要有用for I一样的道理啊,往里面放这个五个数据,I小于小于五,I加加,I加加完了过后呢,我们有个十寸差。好,这里面我这样放,同学们我怎么放呢?我放一个这样的,哈哈,再加再拼接一个,再拼接一个这样的东西。点。F,好,把这个数字打印出来。OK,好这个I就说代表哈,是第几个,好这个就保存一下,看这样可不可以啊。啊,卖的FMTMT这个单词写错了啊。啊,这些错误,就我我往里面放的是一个字符串啊,放的是个字符串。那么这写完以后呢,大家知道传统的方式,注意听啊,我我为什么老记得传统的方法在便历史,传统的方法在便利便利。
04:05
在。在便利。在便利什么呢?在便利这个管道时,管道时如果不关闭,不关闭会什么呢?会阻塞而导致失锁。阻塞而导致失说。导致失所。导致这个对对dead lock,那有些同学说了说老师,那既然这个管道你在便利的时候,它不关闭救阻设你关闭不就完了吗。这就是一个问题。是的,同学们知道啊,我关闭这个管道。确实可以解决问题,但是在我们有时候写代码的时候呢,你要确定在什么时候关闭这个管道,其实是一件挺难的事。大家明白我的意思吧,就是有时候你你不不不好确定到底能不能关,如果说我们将来写一个代码很复杂,但是现在应该这个情况比较少啊,就说将来你们做开发遇到一个非常变态的需求,有可能会遇到,就说你你你自己不确定什么时候关。
05:13
他可能是一个不好确定一个时机,这时呢,你用去,你用你用关闭这个方式还搞不定,因为你不知道怎么关,我们前面举的案例说白了还是比较容易确定的,因为我可以做标志,但有时候你不知道怎么换,怎么办呢?诶咱们有新的方案来看啊,大家看传统方法这样子的。所所以说这个时候呢,有一个问题,问题就来了,在在某些情况下,在实际开发中,开发中有可能哈,有可能可能。我们我们不好确定,我们不好确定什么时候关闭,关闭该管道。不好确定,那这个时候呢,我们就不能用这个传统方式处理了。
06:01
对不对,那怎么办呢?好,我们就可以使用,可以使用这个方式,可以使用select这种方式也能解决,方式可以解决,那么我就直接上代码了啊,传统方法我就不写了,我就不关,我还是要把它编辑出来,我就不关。那怎么办呢?非常的简单直接。看力。上来一个,像一个死循环。先一个是循环,然后咱们写上select。包起来它的基本语法是这个样子的,看到没有三包起来过这个case,然后管道里面是放到一个V里面去,那我就这样写case v。走。我把管道里面的字,比如说这有个管子叫in放进去。好,然后我我我怎么读啊,我我就不就读吗?读出来好,读出来过后我就写一句话啊,我就写一句话。
07:03
哎,我正在写啊,Format论。我说这句话是什么呢?从注意听啊从。从这个int产读取了数据,读取了数据,什么数据呢?来把它打印出来百分D吧,它应该是个是是个整数,对,呃,那就就写个F。啊,写个F,然后呢,这边我们来一个斜杠N,把这个V写进去完事了,那有一个问题,你看它还可以这样判断,它这个会怎么办,我说一下这个关键点啊,注意这个很重要,就是他是这样子的。这种思路去取一个管道时候,即使你这个管道关闭。取不到数据了,他也不阻塞,它会往下走,注意。如果。注意按这种方式啊,这里这里。如果管道。
08:00
就是管道最终都没关闭,一直没有关闭,一直没有关闭,一直没有关闭,也不会一直阻塞,这会不会不会抑制阻塞而导致是说不会抑制阻塞?阻塞而失所。而这个。Log,那他会怎么样呢?就他在这取不到会怎么办呢?朱婷。就你又没有关闭,我又取不到东西会怎么办呢?注意听啊,在这种情况下,他这样子。是它会干什么呢?它会会向下会自动的自动的到,自动的到下一个下一个case匹配。那这就好了,如果我这取不到,你又不关闭,无所谓,我接着往下走。我就自己又又来搞开始V好,我说如果你这取不到,我到哪去取呢?诶我到这个管道里面去取。我到这个管里面去取,注意听啊,就还是有用的,同学们,我到这个管道里面去取,那我又说我从哪里取到的呢?我从这个管道里面取到值了,对,我从这个值管道里面取到值,从是尊这个管道里面取到值。
09:13
那有些同学老师,如果这个再取不到呢,那取不到我就default一下。我就你方特说,诶都取不到了。Dfa UT如果在这儿还在这儿说我,我就说都取不到了,不玩了。对吧,那待会我们还有方案啊,就说都取不到吗。那都取不到,都都取不取不到了,取不到了,好一个笑脸,对吧,走,不玩了,不玩了。不玩了,好,那这个时候呢。同学们,那相当于说他有一种机制,什么机制呢?我在这取不到,我在这取这取不到default取不到,不玩了,不玩了,过后你可以加入自己的逻辑,程序员可以加自己的逻辑程序啊,程序员可以加入自己的逻辑。
10:04
加入业务逻辑,那这样肯定很漂亮了嘛,比如说你去打个比方都举不到我,我我就退出啊,或者是我去做一些别的事情呢,对吧,我不依赖你关闭,因为你关闭你不知道怎么关闭嘛,来我们跑一下看代码能否跑起来啊在这看代码。啊,这边有问题,哪里有问题这地方。百分之,那这应该是个S对不对,因为他判断出来它是,呃,它是个字符串啊,他判断出来是字符串,所以说他发现你用的是这个D呢,他就给你报错了,好先玩一把来走一个代码。我们到这个CD点点CD点点CD到我们的这个DEMO。CD到。我们的这个channel details。Details,呃,Channel detail,好,Details,那听到我们的这个DEMO02。
11:04
就是我们零二哦,然后呢,Go。Main点好对面看。诶,你看他不玩了,你看哎这这这这这这这这老不玩了也不行啊好,你看我我先把这个代码写出来。你看。他这样子的。先从这去。那就看顺序了啊,就看他是怎么怎么取的,你看他先,他是他先从这取,那是看他从哪一个取到东西,因为你放的时候呢,这个时机不不能确定,如果从这取到了,他就这取取又在这取,在这取,取到取到去,他把这东西都取完了,至于这个顺序咱就不好控制了,因为跟他的当前这个生肖环境是有关系的,好好,那么当他都取完了,看HELLO0HELLO1 hello2 hello3hello4这边呢,123456789都取完了,这时呢,他说这那你这个时候怎么办呢?你可以这样子办,你就break没用。
12:00
这个break没用,因为你break呢,还还还是break,这这个select的这个地方,你还跳不出去,跳不出去怎么办呢?好吧。Like label啊,Label,要like label就行了。啊,假设你这个label,我就直接break label这地方标签我们尽量不要使用,但是没有办法也可以用用你,你也可能是结束嘛,比如说有些地方是return,那return就很猛了,就直接就不玩了,是吧,你也可以我们先来测试看break管不管用啊。我们看break管不用好b bak好,为了好看呢,我们每个地方都让它去休眠,那个大概一秒钟,这样时间看起来舒服一点啊看。点sleep。好,各位同学time点,然后E没问题。好,这个地方呢,我们也去一下,就休眠一下,它看效果好,这边询一下好,现在我们看到我们加了break,我们能不能跳出去的问题啊,我们看看能不能跳出去走人。
13:09
好走人诶,这地方是探美女包没女探包对探包好,我们再跑一下走他看效果,诶,你会发现他先从十寸取,再从特取,诶这次从十寸取的取,这时都能取到东西嘛,它很正常啊,都取。很开心很开心,好,后面把时针取出来就只能取那去,取完了过后看这里取不到了,不玩了,但是呢,我退出去。那这时候你有两个解决方法。呃,第一种情况就是你这一段代码是封装到一个。携程里面的那直接return就完了,就简单,就你连标签都不用,你就return,这个return的含义就跟不一样了,Return代表。什么呀?是不是这个代表是不是整个就整个就返回这个,这个函数都不执行了,是吧,就相当于退出这个系统了,那么我们来看看跑一下这个时候能不能退出来。
14:10
好走看代码啊。好分取,哎,这是怎么老取的,哎,嗯,这个它上下文不好确定啊。好走渠道渠道渠道诶再取好取到最后一个不玩了,直接退出去应该。啊正常啊正常,但你可以加点别的逻辑说老师假如我取不到我,我能不能再加点可以,这是一种方案,第二种方案呢,你如果说你你确实想用这个label也可以,比如说你用label,然后呢,这边加break,但是我不推荐啊,尽量不要用label,在labor标签呢,在我们开发中用的很少啊,尽量不要用label。但是这个也也能达到效果,也能达到效果再看一下。我们以前学过这个label啊,这次呢用上了一点,这次又这样子的。
15:01
好的,你看。到对方有个break label,到标签那地方去,他也能也能跳出去。好看效果啊,好可以了。跳出来了都可以啊,那么我们推荐大家使用这个比较好。这两个有什么区别,大家想一想啊,如果这个如果写了,你下面代码是没有机会执行的。他也不让你写break完了功能下面咱们还可以执行,区别还是有的,好,我把这个给同学们板书一下。反述一下,我们讲了一个第三点,这个细节还是很有用的。同学们呢,以后在开发中应该是能够用的到第三点。好,第三点呢,我举了一个案例,对吧,案例具体来说,我们这有一个案例给大家讲了一下它的使用,好具体来说这样写的,把这个代码呢,给各位朋友板书到我们的笔记中去,哎,板述到笔记中去,这讲了一个select。
16:01
好的,呃,那么这个呢,我们就先这个第二部分细节我们先介绍到这里。
我来说两句