最近又重新翻了一遍 Go 的在线文档和相关文章,发现对 Go并发机制理解还不是很深,故在 Github 上建了一个 repo,记录一下几种典型的 go concurrency patterns。

关于 Closure

Go 从语言级支持 closure,而一个 closure 是一个“函数”,它允许访问函数外部的变量(此时称该函数被“绑定”到了这个变量上) —— 这一点对于实现并发很重要,下面很多所谓的并发模式都是基于这种 closure 机制的。下面举一个最简单的 fibonacci 数列的实现:

func fibonacci() func() int {
    x, y := 0, 1
    return func() int {
        z := x + y
        x, y = y, z
        return z
    }
}

func main() {
    f := fibonacci()
    for i := 0; i < 10; i++ {
        fmt.Println(f())
    }
}

几种典型的 Go 并发模式

  1. Generator
  2. Timeout
  3. Ticker
  4. Pipelines and cancellation
  5. TBD …

详见 repo 代码吧。