上节课的例子中
运气好,三页都能抓下来。运气不好,只能抓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,如果要跳出循环,也要加 指定的标签
四:抓取网页代码