通過狀態檢查器checkLink,不斷的獲取切片當中的網址,并且打印了出來。
順序執行。這也就意味著,一旦我訪問google.com等網站就會陷入到等待的狀況中。后面的網址無法訪問。
1 | package main |
在函數的前方,加入go關鍵字,代表開辟一個新的協程。
運行一個go語言的程序的時候,都會開辟一個main協程。子協程通過go的關鍵字來創建。
通過Go的調度器,會將go的協程分配給CPU core取執行。當某一個子協程陷入了暫?;蚪Y束,Go的調度器會立即切換到其他的協程工作。因此大大的提高了效率。
但是當前的程序,直接退出了。因為main協程終止以后,子協程全部都會被銷毀。
1 | package main |
通道就是實現協程之間的通信。
c:= make(chan string) 代表創建了一個通道,此通道只能夠傳遞字符串類型。
1 | package main |
1 | http://www.baidu.com 連接上了 |
上面的代碼輸出的結果為:
意味著百度連接上之后就退出了。這是由于主協程fmt.Println(<-c)陷入等待,當百度的子協程運行完畢,為通道添加信息之后。那么主協程退出,但是其他的協程還沒有運行完畢。但是會直接銷毀。
如果想要全部打印出來,增加了多個等待通道的指令。
1 | package main |
1 | http://www.baidu.com 連接上了 |
并不是順序執行的。
1 | package main |
比上一個代碼效果一樣,更加的清晰
1 | package main |
下面的代碼有一個非常嚴重的問題,
1 | package main |
上面寫法的改進,不再是引用,而是每一個副本。傳遞到函數中。
1 | package main |
本文鏈接: https://dreamerjonson.com/2018/11/27/golang-20-channel/
版權聲明: 本博客所有文章除特別聲明外,均采用 CC BY 4.0 CN協議 許可協議。轉載請注明出處!
![golang語言漸入佳境[20]-協程與通道](https://cache.yisu.com/upload/information/20200312/65/238845.jpg)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。