package main
import (
“fmt”
“time”
)
/*
應用實例1
請完成goroutine和channel協同工作的案例,具體要求:
1)開啓一個writeData協程,向管道intChan中寫入50個整數。
2)開啓一個readData協程,從管道intChan中讀取writeData寫入的數據。
3)注意:writeData和readData操作的時同一個管道
4)主線程需要等待writeData和readData協程都完成工作才能退出
思路分析:
看代碼演示:
*/
//write Data,寫一個協程
func writeData(intChan chan int){
for i:=1;i<=50;i++{
//放入數據
intChan<-i
fmt.Println(“writeData”,i)
time.Sleep(time.Second)
}
close(intChan)//循環寫入,寫入50個數據後,自動關閉
}
//寫另外一個協程read data
func readData(intChan chan int,exitChan chan bool){
//關閉後開始循環讀取,
for{
v,ok:=<-intChan
if !ok{
break
}
time.Sleep(time.Second)
fmt.Printf(“readData 讀到數據=%v\n”,v)
}
//readData讀取完數據後,即任務完成
exitChan<-true
close(exitChan)
}
func main(){
//創建兩個管道
intChan:= make(chan int,50)
exitChan:=make(chan bool,1)
go writeData(intChan)
go readData(intChan,exitChan)
time.Sleep(time.Second*10)
for{
_,ok:=<-exitChan
if!ok{
break
}
}
}
/*
1)啓動一個協程,將1-2000的數放入到一個channel中,比如numChan
2)啓動各個協程,從numChan取出數(比如n),並計算1+…+n的值,並存放到resChan
3)最後8個i而成協同完成工作後,再遍歷resChan,顯示結果{如 res[1]=1…res[10]=55…
4)注意:考慮resChan chan int是否合適?
作業2
要求:
1)開一個協程writeDataTofile,隨機生成1000個數據,存放到文件中
2)當writeDataFile完成寫1000個數據到文件後,讓sort協程從文件中讀取1000個文件,
3)考察點:協程和管道+文件的綜合使用
4)功能拓展開10個協程writeDataTofile,每隔協程隨機生成1000個數據,存放到10個文件
5)當10個文件都生成了,讓10個sort協程從10文件中讀取1000個文件,並完成排序重新寫入到10個結果文件。
*/