首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go非阻塞通道发送,在尝试发送之前测试是否失败?

Go非阻塞通道发送,在尝试发送之前测试是否失败?
EN

Stack Overflow用户
提问于 2015-03-13 01:12:11
回答 1查看 319关注 0票数 1

有没有一种方法可以在不实际尝试发送的情况下测试go通道发送的失败?标准的非阻塞发送是这样的:

代码语言:javascript
复制
msg := "hi"
select {
    case messages <- msg:
        fmt.Println("sent message", msg)
    default:
        fmt.Println("no message sent")
    }

问题是,我需要让"msg“准备好发送,以便测试通道。

我想测试一下,发送是否会以一种不需要"msg“准备发送的方式失败。

EN

回答 1

Stack Overflow用户

发布于 2015-03-13 01:18:40

这在一般情况下是没有好处的,因为你会有一场比赛。在生成msg之后,信道可能不再准备发送。

如果你需要这个模式,你要么需要第二个通道来发送信号,

代码语言:javascript
复制
select {
    case <-ready:
        msg := generateMsg()
        messages <- msg
        fmt.Println("sent message", msg)
    default:
        fmt.Println("no message sent")
}

或者,您可以使用sync.Cond

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29016118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档