题目一:需要实现两个goroutine,这里分别命名为A、B,其中A用来产生随机数并将随机数写入channel中,B用来从channel中读取随机数并将随机数打印到标准输出,最后要求B最多在标准输出打印出五个随机数。
实现上述题目需要注意以下几点:
-
Go中goroutine是非阻塞的。
-
channel初始化为无缓冲时,读写都是阻塞的,通常用for循环来读取channel中的数据,当管道关闭后,for循环退出。
-
Go中专用select case语法来从管道中读取数据。
案例如下:
package main
import (
"fmt"
"math/rand"
"sync"
)
func main() {
printChan := make(chan int)
wg := sync.WaitGroup{}
wg.Add(2)
go func() {
defer wg.Done()
for i := 0; i < 5; i++ {
printChan <- rand.Intn(5)
}
close(printChan)
}()
go f