Golang|Go语言 使用goroutine和channel实现一个计算int64随机数各位数和的程序

  • Post author:
  • Post category:golang




Golang|Go语言 使用goroutine和channel实现一个计算int64随机数各位数和的程序



题目要求:

  1. 开启一个goroutine循环生成int64类型的随机数,发送到jobChan;
  2. 开启24个goroutine从jobChan中取出随机数计算各位数的和,将结果发送到resultChan;
  3. 主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 版权协议,转载请附上原文出处链接和本声明。