由于死锁,我有以下最小示例在第一个命令行输入后退出:
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 例程,它不会出现任何死锁问题。那么为什么会出现这种僵局呢?