Golang中的管道(channel) 、goroutine与channel实现并发、单向管道、select多路复用以及goroutine panic处理
// 并发地读取两个channel
func readFromChannels(c1, c2 <-chan string) {
for {
select {
case msg1 := <-c1:
fmt.Println("Received from c1:", msg1)
case msg2 := <-c2:
fmt.Println("Received from c2:", msg2)
}
}
}
func main() {
// 创建两个channel
c1 := make(chan string)
c2 := make(chan string)
// 创建goroutine去写入channel
go func() {
c1 <- "Hello"
c1 <- "World"
close(c1)
}()
go func() {
c2 <- "Golang"
c2 <- "Concurrency"
close(c2)
}()
// 并发地从两个channel读取数据
readFromChannels(c1, c2)
}
这段代码展示了如何使用Go语言的channel和goroutine来实现并发地从两个channel中读取数据。readFromChannels
函数通过select
关键字并发地监听两个channel,使得在多个channel进行选择时,可以公平地处理发送给它们的数据。这是Go语言中实现并发编程的一个常见模式。
评论已关闭