一文掌握Go语言中的chan

发表时间: 2023-03-17 20:45

Golang 的 chan 是一种用于协程之间进行通信的数据类型。通常情况下,chan 可以被用于多个协程之间传递数据,其中一个协程将数据发送到 chan 中,另一个协程从 chan 中读取数据。

以下是一个简单易懂的 golang chan 的使用方法

  1. 创建一个 chan,在主 goroutine 中初始化:
ch := make(chan int)
  1. 启动一个协程,向 chan 中发送数据:
go func() {    ch <- 42}()
  1. 主 goroutine 从 chan 中读取数据:
result := <-chfmt.Println(result) // 输出:42
  1. 在多个协程中使用 chan:
ch := make(chan int)go func() {    for i := 0; i < 10; i++ {        ch <- i    }}()go func() {    for {        result := <-ch        fmt.Println(result)    }}()

在这个例子中,我们创建了一个 chan,并启动了两个协程。第一个协程向 chan 中发送 0~9 的数字,第二个协程不断地从 chan 中读取数据并打印出来。

这样,我们就能够在多个协程之间传递数据了。需要注意的是,如果没有接收方来读取 chan 中的数据,发送方会一直阻塞,直到有接收方来读取数据。如果没有发送方向 chan 中发送数据,接收方也会一直阻塞,直到有发送方来发送数据。