单通道和选择语句死锁

我有以下最小示例,该示例由于死锁而在第一个命令行输入之后无法正常工作:


package main     


import "fmt"     

import "os"     


func main() {     

    channel1 := make(chan string)     


    go func() {     

        var str string     

        for {              

            fmt.Fscanln(os.Stdin, &str)     

            channel1 <- str                

        }                      

    }()      


    for {     

        select {     

        case str := <-channel1:     

            fmt.Printf("Channel1 said: %v\n", str)     

        }                                             

    }             

}  

我本来希望这只是接受用户输入并一遍又一遍地回显它。另外,我确实注意到,如果添加第二个通道和第二个go例程,则不会出现任何死锁问题。那么为什么会出现这种僵局呢?


开心每一天1111
浏览 137回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go