您现在的位置是:首页 > 编程 > 

Go程序例子(5):非阻塞通道操作

2025-07-27 22:08:25
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组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1250866.html

相关标签:无
上传时间: 2025-07-27 18:27:23
留言与评论(共有 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