golang channel

2023-08-21 11:21:07 浏览数 (2)

在Go语言中,channel是一种用于在goroutine之间传递数据的通信机制。它可以让一个或多个goroutine等待另一个goroutine发送消息,也可以让一个goroutine等待多个goroutine的响应。

channel有以下几个特点:

  1. channel是类型安全的,只能发送和接收指定类型的数据;
  2. channel是阻塞的,当channel中无数据时,接收方会被阻塞,直到有数据可用;
  3. channel是同步的,发送方和接收方都需要准备好才能完成数据交换;
  4. channel是有缓冲区的,可以指定缓冲区的大小,在缓冲区未满时,发送方可以发送数据而不会被阻塞。但是,当缓冲区已满时,发送方会被阻塞。

在Go语言中,可以使用make函数来创建一个channel,如下所示:

ch := make(chan int) // 创建一个int类型的无缓冲区channel ch := make(chan int, 10) // 创建一个int类型的有缓冲区channel,缓冲区大小为10

向channel发送数据可以使用<-符号,从channel接收数据可以使用<-符号,如下所示:

ch <- 1 // 发送数据 x := <-ch // 接收数据

示例代码:

// 创建一个int类型的无缓冲区channel ch := make(chan int)

// 启动一个goroutine向channel发送数据 go func() { ch <- 1 }()

// 接收从goroutine发送过来的数据 x := <-ch

// 创建一个int类型的有缓冲区channel ch := make(chan int, 10)

// 启动10个goroutine向channel发送数据 for i := 0; i < 10; i { go func() { ch <- 1 }() }

// 接收从10个goroutine发送过来的数据 for i := 0; i < 10; i { x := <-ch }

0 人点赞