package main
import (
"fmt"
"math/rand"
"sync"
"time"
)
var wg sync.WaitGroup
type job struct{
value int64
}
type result struct{
job *job
result int64
}
func writeDate(wr chan <- *job){
defer wg.Done()
for {
x :=rand.Int63()
newJob :=&job{
value:x,
}
wr <- newJob
time.Sleep(time.Millisecond*500)
}
}
func readData(wr <- chan *job,resultChan chan <- *result){
defer wg.Done()
for {
job := <- wr
sum :=int64(0)
n :=job.value
for n >0{
sum +=n%10
n=n/10
}
newResult :=&result{
job:job,
result:sum,
}
resultChan<-newResult
}
}
func main() {
var jobChan = make( chan *job,100)
var resultChan =make (chan *result,100)
wg.Add(1)
go writeDate(jobChan)
wg.Add(24)
for i :=0;i<24;i++{
go readData(jobChan,resultChan)
}
for result :=range resultChan{
fmt.Println(result.job.value,result.result)
}
}
go-channel生产消费案例
最新推荐文章于 2024-07-16 12:13:37 发布