デッドロックが原因で最初のコマンドライン入力の後にベイルアウトする次の最小限の例があります。
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)
}
}
}
私はこれが単にユーザー入力を受け取り、それを何度も何度もエコーすることを期待していました。また、2番目のチャネルと2番目のgoルーチンを追加すると、デッドロックの問題が発生しないことに気付きました。では、なぜこのデッドロックが発生するのでしょうか。