gpt4 book ai didi

go - go 中的非阻塞 channel 操作。发送?

转载 作者:IT王子 更新时间:2023-10-29 01:23:59 25 4
gpt4 key购买 nike

我正在浏览 Go by Example: Non-Blocking Channel Operations

据我了解,第一个select正在触发 default案例,因为 messages 中没有任何内容 channel ,如果 default案例不存在,我们会收到 fatal error: all goroutines are asleep - deadlock!错误,对吧?

好吧,我不知道如何触发第二个 select ,专门触发case messages <- msg:

正如我所想,它应该与接收相反。因此,如果有 2 条消息的缓冲区并且我们将第 3 条消息发送到 channel ,它将触发 default条款,但 messages channel 是空的,那么为什么在第二个选择中它会触发 default条款?我怎样才能触发 case messages <- msg:条款?

最佳答案

why in the second select does it trigger the default clause?

因为 channel 是无缓冲的,并且没有其他 go routine 在接收时被阻塞。

how can I trigger the case messages <- msg: clause?

您可以:

  1. 使消息缓冲

    messages := make(chan string, 1)

    https://play.golang.org/p/b1aO6N-dYf

  2. 创建另一个在接收时被阻塞的 go 例程

    go func() {
    fmt.Println("Received from other go routine", <-messages)
    }()

    https://play.golang.org/p/Z7e1ZcO3C5

关于go - go 中的非阻塞 channel 操作。发送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41000161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com