第二十篇: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