第二十篇:go协程练习: select、超时处理、goto语句


上节课的例子中

运气好,三页都能抓下来。运气不好,只能抓1-2

原因很简单,我们创建的协程并不是按顺序执行的

有可能先执行第三页

 

:select

 

select 很类似switch case .只不过用于channel通信(要么send要么receive

 

譬如select {

 

   case i<-c:

 

       xxxoo

 

   case c<-123:

 

      xxxoo

 

   default:

 

}

 

1:按顺序判断,如果只有一个case通过,则执行该case

 

2:如果多个case都通过,则随机选一个执行

 

3:如果都没通过,则查找default;如果没有default,则阻塞

 

4:然而 在select下用break,只不过中断了当前的case,跳出要使用标签语法

 

 

:超时处理(time.After)

 

time.After(time.Second*3)

 

等待指定时间后,向返回的chan里面写入当前时间。此函数不阻塞我们当前的协程,它的返回值是一个 只读channel

 

 

函数里面传递参数的时候只读和只写channel就比较有用

 

定义只读的channel  

 

 c := make (<-chan int)

 

定义只写的channel

 

c := make (chan<- int)

 

 

:跳出循环标签语法

(1):goto语句 死循环代码 goto语句跳转到指定标签

(2) :break 语句 跳出循环 跳转到指定标签

  然而在select 下用break,只不过是中断了当前的case,如果要跳出循环,也要加 指定的标签

 

:抓取网页代码

 

 

 

 

 

 

 

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM