登录
首页 >  Golang >  Go问答

为何该 goroutine 进入休眠状态?

来源:stackoverflow

时间:2024-02-15 17:36:14 500浏览 收藏

你在学习Golang相关的知识吗?本文《为何该 goroutine 进入休眠状态?》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

在我看来,“select...case”的意思是“如果有任何chan可用,它就会执行”。那么,为什么这里会出现错误,我认为message<-msg可用chan发送,但它导致僵局!。非常感谢。

import "fmt"

func main() {
    messages:=make(chan string)
    //signals:=make(chan string)

    select {
    case msg:=<-messages:
        fmt.Println(msg)
    default:
        fmt.Println("no mes receivedd")
    }

    msg:="h1"
    select {
    case messages<-msg:
        fmt.Println("sent message",msg)
    }
}

正确答案


第一个选择有一个 default 案例,因此它立即选择了它。第二个 select 尝试写入 messages,但没有其他 goroutine 监听,因此出现死锁。

将第二个选择移到第一个之前,将其放入 goroutine 中,并删除 default 情况,然后您将成功发送/接收。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《为何该 goroutine 进入休眠状态?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>