缓冲通道是 go 函数并发编程中安全传递数据的有效方法。它们创建一个固定大小的缓冲区来存储待发送或接收的数据。使用 make 创建缓冲通道,指定容量。生产者 goroutine 使用 chan
Go 语言函数并发编程中的缓冲通道用法
缓冲通道在 Go 语言函数并发编程中非常有用,它允许在 goroutine 之间安全地传递数据。它通过创建一个固定大小的缓冲区来实现,该缓冲区存储待发送或接收的数据。
创建缓冲通道
bufferedChannel := make(chan int, 10)
登录后复制
这里的 10
表示缓冲区的容量,它可以存储最多 10 个整数。
goroutine 间的通信
生产者 goroutine 可以使用 chan<-
运算符向通道发送数据:
go func() { bufferedChannel <- 42 }()
登录后复制
消费者 goroutine 可以使用 <-chan
运算符从通道接收数据:
go func() { fmt.Println(<-bufferedChannel) }()
登录后复制
实战案例
为了演示缓冲通道的用法,让我们编写一个简单的程序,它从生产者 goroutine 生成随机数,并将其传递给消费者 goroutine 进行打印。
代码如下:
package main import ( "fmt" "math/rand" "sync" ) func main() { // 创建一个缓冲通道 bufferedChannel := make(chan int, 10) // 生成随机数的 goroutine go func() { for i := 0; i < 100; i++ { bufferedChannel <- rand.Intn(100) } close(bufferedChannel) // 发送完成后关闭通道 }() // 打印随机数的 goroutine var wg sync.WaitGroup wg.Add(1) go func() { defer wg.Done() for { value, ok := <-bufferedChannel if !ok { return // 通道已关闭 } fmt.Println(value) } }() wg.Wait() // 等待消费者 goroutine 结束 }
登录后复制
在这个示例中,我们将缓冲区的容量设置为 10,这意味着生产者 goroutine 可以并行生成 10 个随机数,而无需阻塞。消费者 goroutine 循环从通道中接收随机数,直到通道关闭为止。
以上就是Golang函数并发编程中的缓冲通道使用方法的详细内容,更多请关注叮当号网其它相关文章!
文章来自互联网,只做分享使用。发布者:周斌,转转请注明出处:https://www.dingdanghao.com/article/362417.html