## **應用案例一:**
請完成goroutine和channel協同工作的案例,具體要求:
1)開啟一個**writeData**協程,向管道**intChan**中寫入50個整數.
2)開啟一個**readData**協程,從管道**intChan**中讀取**writeData**寫入的數據。
3)注意: **writeData**和**readDate**操作的是同一個管道
4)主線程需要等待**writeData**和**readDate**協程都完成工作才能退出
<br>
<br>

<br>
**運行結果**
```
讀取到數據為0
寫入數據為0
寫入數據為1
寫入數據為2
寫入數據為3
寫入數據為4
寫入數據為5
寫入數據為6
寫入數據為7
寫入數據為8
寫入數據為9
寫入數據為10
寫入數據為11
寫入數據為12
寫入數據為13
寫入數據為14
寫入數據為15
寫入數據為16
寫入數據為17
寫入數據為18
寫入數據為19
寫入數據為20
寫入數據為21
寫入數據為22
寫入數據為23
寫入數據為24
寫入數據為25
寫入數據為26
寫入數據為27
寫入數據為28
寫入數據為29
寫入數據為30
寫入數據為31
寫入數據為32
寫入數據為33
寫入數據為34
寫入數據為35
寫入數據為36
寫入數據為37
寫入數據為38
寫入數據為39
寫入數據為40
讀取到數據為1
寫入數據為41
寫入數據為42
讀取到數據為2
讀取到數據為3
讀取到數據為4
讀取到數據為5
讀取到數據為6
讀取到數據為7
讀取到數據為8
讀取到數據為9
讀取到數據為10
讀取到數據為11
讀取到數據為12
讀取到數據為13
讀取到數據為14
讀取到數據為15
讀取到數據為16
讀取到數據為17
讀取到數據為18
讀取到數據為19
讀取到數據為20
讀取到數據為21
讀取到數據為22
讀取到數據為23
讀取到數據為24
讀取到數據為25
讀取到數據為26
讀取到數據為27
讀取到數據為28
讀取到數據為29
讀取到數據為30
讀取到數據為31
讀取到數據為32
讀取到數據為33
讀取到數據為34
讀取到數據為35
讀取到數據為36
讀取到數據為37
讀取到數據為38
讀取到數據為39
讀取到數據為40
讀取到數據為41
讀取到數據為42
讀取到數據為43
寫入數據為43
寫入數據為44
寫入數據為45
寫入數據為46
寫入數據為47
寫入數據為48
寫入數據為49
寫入數據為50
讀取到數據為44
讀取到數據為45
讀取到數據為46
讀取到數據為47
讀取到數據為48
讀取到數據為49
讀取到數據為50
```
<br>
<br>
## **應用案例二:**
阻塞
**問題:** 上面的代碼如果,注銷掉,go readData(intchan,exitchan),程序會怎么樣??
**答:** 如果只向管道,寫入數據,而沒有讀取,就會出現阻塞deadlock,原因是intchan
容量只有10,而writeData會寫入50個數據,因此會阻塞在writeData的**intchan<-i**
<br>
<br>
### **應用案例三:**
需求:要求統計1-8000的數字中,哪些是素數?這個問題在本章開篇就提出了,現在我們有goroutine和channel的知識后,就可以完成了
分析思路:
* 傳統的方法,就是使用一個循環,循環的判斷各個數是不是素數[ok]。
* 使用并發 **/** 并行的方式,將統計素數的任務分配給多個(4個)goroutine去完成,完成任務時間短。
1,畫出分析思路2\. 代碼實現
說明:使用goroutine完成后, 可以在使用傳統的方法來統計一下,看看完成這個
任務,各自耗費的時間是多少?[用map保存primeNum]
- Golang語言之旅
- 第一章:初始小節以及安裝
- 一:Golang語言特性
- 二:Windows上安裝Go語言開發包
- 三:在Mac OS上安裝Go語言開發包
- 第二章:GO語言注意事項
- 一:Dos的常用指令
- 第三章:Go初識小菜
- 一:Go語言之變量與常量
- 二:Go內置值-引用類型
- 三:基本的數據類型
- 四:字符串(char)
- 五:布爾類型(bool)
- 六:字符串類型(string)
- 七:基本數據類型的默認值
- 八:基本數據類型的互相轉換
- 九:基本數據類型和string類型的相互轉換
- 十:Golang指針
- 十一:值類型和引用類型
- 十二:標識符和命名規范
- 十三:系統保留關鍵字and預定義標識符
- 十四:fmt常用方法解析
- 第四章:Go運算符
- 一:運算符的基本介紹
- 二:算術運算符
- 2.1:算數運算符細節
- 三:關系運算符
- 3.1:關系運算符細節
- 四:邏輯運算符
- 4.1:邏輯運算符細節及案例
- 五:Go賦值運算符
- 5.1:案例演示賦值運算符的基本使用
- 5.2:賦值運算符的特點
- 六:Go位運算符
- 七:其他運算符
- 八:運算符的優先級
- 九:控制臺輸入語句
- 十:進制
- 十一:位運算
- 第五章:流程控制大綱
- 一:if語句
- 二:switch語句
- 三:for循環
- 第六章:函數-包-錯誤處理
- 一:Go函數
- 二:Go包
- 三:匿名函數
- 四:閉包
- 五:函數defer
- 六:函數參數的傳遞方式
- 七:變量的作用域
- 八:時間和日期相關函數
- 九:new和recover異常
- 十:數組(Array)切片(Section)
- 十一:切片(slice)
- 十二:3 數組的排序和查找
- 第七章:Map
- 第一節:Map基礎認識
- 第二節:Map初始化和make
- 第三節:Map增刪改查
- 第四節:Map的切片
- 第五節:Map的注意事項
- 第八章:面向對象(上)
- 第一節:結構體(值類型)
- 第二節:方法
- 第三節:面向對象編程應用實例
- 第九章:面向對象(下)
- 第一節:面向對象之抽象
- 第二節:面向對象之繼承
- 第三節:面向對象之多態
- 第四節:接口
- 第十章:文件操作
- 第一節:文件基本介紹
- 第二季:寫文件實例操作
- 第三節:JSON
- 第十一章:單元測試
- 第一節:單元測試介紹
- 第二節:單元測試案例
- 第三節:單元測試總結
- 第四節:單元測試案例
- 第十二章:goroutine和channel
- 第一節:goroutine基本介紹
- 第二節:goroutine入門案例
- 第三節:goroutione調度模型
- 第四節:Golang設置運行的CPU數量
- 第十二章:channel
- 第一節:channel基本介紹
- 第二節:channel基本使用
- 第三節:channel案例演示
- 第四節:channel 使用的注意事項
- 第五節:channel練習題
- 第六節:channel的遍歷和關閉
- 第七節:goroutione和channel結合
- 第八節:channel細節處理
- 第十二章:并發模式
- 第十三章:反射reflect
- 第一節:反射基本介紹
- 第二節:反射重要的函數和概念
- 第三節:反射快速入門案例
- 第四節:反射注意事項
- 第五節:反射練習題
- 第六節:反射最佳實踐