如何在Go中实现并发编程?

6 min read

Go 的并发编程模型是基于 Goroutine 和 Channel 实现的。

  1. Goroutine:类似于线程,但是比线程更加轻量级。可以使用 go 关键字来启动一个 goroutine。

  2. Channel:是一种特殊的数据类型,用于在 goroutine 之间传递数据。可以使用 make 函数创建一个 channel,也可以使用 <- 符号将数据发送到 channel 或从 channel 接收数据。

下面是一个简单的并发编程的例子:

package main

import (
	"fmt"
)

func worker(done chan bool) {
	fmt.Println("working...")
	done <- true
}

func main() {
	done := make(chan bool, 1)
	go worker(done)
	<-done
	fmt.Println("done")
} 

这个例子中,我们定义了一个 worker 函数,它接收一个类型为 chan bool 的参数 done。在 worker 函数内部,我们打印了"working..."后将一个 true 值发送到 done channel 中。

在 main 函数中,我们使用 make 函数创建了一个类型为 chan bool,缓冲区大小为 1 的 channel。然后我们使用 go 关键字启动了一个 goroutine 来运行 worker 函数,在启动完 goroutine 后,我们从 done channel 中接收一个值,此时 main 函数将被阻塞,直到 done channel 中有值被发送过来为止。最后,我们再打印一个"done"表示程序结束了。

这是一个非常简单的例子,但是它展示了 Goroutine 和 Channel 相互配合的威力。在真实的应用中,我们可以使用 Goroutine 和 Channel 结合处理比这个例子更加复杂的并发任务,从而提高程序的性能和并发能力。