Golang 使用 Channel 来并发读取对象
package main
import (
"fmt"
"sync"
)
// 假设我们有一个对象,我们需要从多个通道并发读取它们
type SomeObject struct {
// ...
}
func main() {
// 创建通道
channels := make([]chan SomeObject, 10)
for i := range channels {
channels[i] = make(chan SomeObject)
go produce(channels[i]) // 每个通道都启动一个生产者协程
}
// 使用WaitGroup等待所有通道读取完成
var wg sync.WaitGroup
wg.Add(len(channels))
// 从每个通道并发读取对象
for _, ch := range channels {
go func(ch chan SomeObject) {
defer wg.Done()
obj := <-ch
fmt.Printf("Read object: %#v\n", obj) // 处理对象
}(ch)
}
wg.Wait() // 等待所有通道读取完成
}
func produce(ch chan<- SomeObject) {
// 生产对象并发送到通道
// ...
ch <- SomeObject{} // 示例:发送一个空对象
close(ch)
}
这段代码创建了一个通道数组,并为每个通道启动了一个生产者协程。然后,它并发地从这些通道读取对象,并在读取完成后关闭通道。这个过程展示了如何在Go语言中使用通道来并发地处理对象。
评论已关闭