上節課的例子中
運氣好,三頁都能抓下來。運氣不好,只能抓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,如果要跳出循環,也要加 指定的標簽
四:抓取網頁代碼