Golang|Go语言 使用goroutine和channel实现一个计算int64随机数各位数和的程序
题目要求:
- 开启一个goroutine循环生成int64类型的随机数,发送到jobChan;
- 开启24个goroutine从jobChan中取出随机数计算各位数的和,将结果发送到resultChan;
- 主goroutine从resultChan取出结果并打印到终端输出;
最近在学习Go语言,看到这个题目就动手解决了一下,比较了
另一种用结构体的方法,感觉用结构体和指针太绕了
,所以我这里使用map感觉简单点实现了。(新手提示:Goland 按ctrl+F2或者ctrl+c结束运行)
package main
import (
"fmt"
"math/rand"
"time"
)
var jobChan = make(chan int64)
var resultChan = make(chan map[int64]int64)
//generateRandomNumbers 用于持续循环生成int64的随机数,并传到jobChan channel
func generateRandomNumbers() {
for {
x := rand.Int63()
jobChan <- x
time.Sleep(time.Second)
}
}
//sumRandomNumbers 从通道jobChan中读取数据,然后计算各个位数之和存入resultChan channel中
func sumRandomNumbers() {
for {
RandomNumber := <-jobChan
value := RandomNumber
var sum int64 = 0
for value > 0 {
sum = sum + value%10
value = value / 10
}
resultChan <- map[int64]int64{RandomNumber: sum}
}
}
func main() {
//1. 开启一个goroutine循环生成int64类型的随机数,发送到jobChan
go generateRandomNumbers()
//2. 开启24个goroutine从jobChan中取出随机数计算各位数的和,将结果发送到resultChan
for i := 0; i < 24; i++ {
go sumRandomNumbers()
}
//3. 主goroutine从resultChan取出结果并打印到终端输出
for i := range resultChan {
for RandomNumber, sum := range i {
fmt.Printf("Random Number:%d \t Sum:%d \n", RandomNumber, sum)
}
}
}
版权声明:本文为weixin_45593319原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。