下面由Golang教程栏目给大家介绍关于golang当中对select的理解,希望对需要的朋友有所帮助!
Select 语句和 Swithc 语句的句式十分相似,但是 Select 中的 Case 必须是一个通信 *** 作(一个 Channel *** 作)。其执行逻辑是:哪一个 Case 后面的 Channel *** 作可以被成功执行,则执行该 Case 下的代码块。如果同时多个 Case 可被成功执行,则随机选择其中一个。如果所有 Case 均不可被成功执行,则执行 default 下的代码块。如果没有 default 则会阻塞并返回死锁错误。
监听 IO *** 作,当 IO *** 作发生时,触发相应的动作
这个说法是对的,监听(Channel 的) IO *** 作并作出相应动作确实是 Select 的应用场景,但是千万不要误以为 Select 语句是在选择哪个 case 下的 Channel *** 作被执行了!这么理解是错的!Select 真正会选择的是哪个 case 下的 Channel *** 作可以被成功执行,则执行该 case 下的代码块。
比如,当一个 Channel c1 被写入一条数据
c1 := make(chan string, 1)c1 <- "Hello World!"
如果我们有以下 Select 判断语句
select { case <-c1: fmt.Println("Case 1 is selected") case c1<-"Hello World!": fmt.Println("Case 2 is selected") default : fmt.Println("Default is selected")}
你会得到如下结果
Case 1 is selected
因为 c1 被写入了一条数据,所以我们可以成功 “从 c1 读出一条数据”。也就是第一个 case 可以被成功执行。所以,第一个 case 下的代码块最终被执行。
以上就是关于golang当中对select的理解的详细内容,
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)