【go语言】Goroutines 并发模式(二)
前言 在 Goroutines 并发模式(一) 中,我们简单地通过boring函数的例子来粗略地阐述了通过channels来和goroutines交流的方法。在本篇中,我将从pattern的方向出发,通过对boring函数的例子进行各种改写,来讲解几种常见了goroutines的并发模式。 并发模式 让我们先来回顾一下boring函数的例子。 func boring(msg string, c chan string) { for i := 0; ; i++ { c <- fmt.Sprintf("%s %d", msg, i) time.Sleep(time.Duration(rand.Intn(1e3)) * time.Millisecond) } } func main() { c := make(chan string) go boring("boring!", c) for i := 0; i < 5; i++ { fmt.Printf("You say: %q\n", <-c) } fmt.Println("You're boring; I'm leaving.") } 接下来,我会base于上面的这个例子,来介绍各种patterns。 生成器(Generator) 由于go中的channel也是一种变量,所以我们可以通过返回channel的方式来传递结果 func