Go程序例子(5):非阻塞通道操作
Go程序例子(5):非阻塞通道操作
通道上的基本发送和接收操作是阻塞的。然而,我们可以使用带有 default 子句的 select 来实现非阻塞的发送、接收,甚至是非阻塞的多路选择。代码语言:go复制package main
import "fmt"
func main() {
messages := make(chan string)
signals
Go程序例子(5):非阻塞通道操作
通道上的基本发送和接收操作是阻塞的。然而,我们可以使用带有 default 子句的 select 来实现非阻塞的发送、接收,甚至是非阻塞的多路选择。
代码语言:go复制package main
import "fmt"
func main() {
messages := make(chan string)
signals := make(chan bool)
// 这是一个非阻塞的接收。如果 messages 通道中有值,select 会选择 <-messages 这一 case 并获取该值。如果没有值,它会立即选择 default case。
select {
case msg := <-messages:
fmt.Println("received message", msg)
default:
fmt.Println("no message received")
}
// 非阻塞的发送类似。这里,msg 无法发送到 messages 通道,因为该通道没有缓冲区且没有接收者。因此,选择了 default case。
msg := "hi"
select {
case messages <- msg:
fmt.Println("sent message", msg)
default:
fmt.Println("no message sent")
}
// 我们可以在 default 子句之前使用多个 case 来实现多路非阻塞选择。在这里,我们尝试对 messages 和 signals 通道进行非阻塞接收。
select {
case msg := <-messages:
fmt.Println("received message", msg)
case sig := <-signals:
fmt.Println("received signal", sig)
default:
fmt.Println("no activity")
}
}
运行结果:
代码语言:javascript代码运行次数:0运行复制$ go run non-blocking-channel-operati.go
no message received
no message sent
no activity
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-27 18:27:23
上一篇:hhdb客户端介绍(25)
下一篇:hhdb客户端介绍(24)
推荐阅读
留言与评论(共有 10 条评论) |
本站网友 仪器祛斑 | 9分钟前 发表 |
msg 无法发送到 messages 通道 | |
本站网友 别怪我太神经 | 22分钟前 发表 |
msg | |
本站网友 天穹 | 26分钟前 发表 |
Go程序例子(5):非阻塞通道操作 通道上的基本发送和接收操作是阻塞的 | |
本站网友 win7显示桌面 | 6分钟前 发表 |
msg 无法发送到 messages 通道 | |
本站网友 怎么忽然就成了这样 | 23分钟前 发表 |
= <-messages | |
本站网友 索爱刷机 | 1分钟前 发表 |
msg) default | |
本站网友 汽车制造 | 15分钟前 发表 |
因为该通道没有缓冲区且没有接收者 | |
本站网友 中国平安保险集团 | 18分钟前 发表 |
msg 无法发送到 messages 通道 | |
本站网友 番石榴皮能吃吗 | 27分钟前 发表 |
fmt.Println("no activity") } }运行结果:代码语言:javascript代码运行次数:0运行复制$ go run non-blocking-channel-operati.go no message received no message sent no activity |