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