golangエラー:all goroutines are asleep-deadlock!

2191 ワード

go channelのテスト中に次のエラーメッセージが表示されました:fatal error: all goroutines are asleep - deadlock!エラーメッセージの意味はmain goroutine線の中で、他のgoroutine線からデータを入れることを期待していますが、他のgoroutine線はすでに実行済み(all goroutines are asleep)で、パイプにデータを入れることは永遠にありません.だから、main goroutine線は永遠に来ないデータを待っていて、プログラム全体が永遠に待っています.この時は上記の間違いを報告します.検証:
package main

import (
    "fmt"
)

func main() {
    ch1 := make (chan int)
    for {
        select {
        case  "ch1 pop one")

            }
        }
    }

}

実行プロンプトエラー:
fatal error: all goroutines are asleep - deadlock!

上のコードにgoroutineとsleepを追加すると、gorutineが終了してからエラーが印刷されるのを待っています.
package main

import (
    "fmt"
    "time"
)

func main() {
    ch1 := make (chan int)
    go func() {
        fmt.Println("sleep 1")
        time.Sleep(5 * time.Second)
        fmt.Println("sleep 2")
    }()

    for {
        select {
        case  "ch1 pop one")

            }
        }
    }

}

印刷結果:
sleep 1
sleep 2
fatal error: all goroutines are asleep - deadlock!