2017-11-13 8 views
2

私はデータベースに項目を書き込むためにゴルーチンを使用しようとしています。しかし、goroutineは何らかの理由で何もしないようです。ゴルーチンが実行されない

私が持っている以下の機能:

func addEvent(w http.ResponseWriter, r *http.Request) { 
    body, err := ioutil.ReadAll(r.Body) 
    fmt.Println(string(body[:])) 

    if err != nil { 
     panic(err) 
    } 

    eventCh := make(chan []byte) 
    eventCh <- body 
    go models.WriteEventToDb(eventCh) 

} 

func WriteEventToDb(eventCh chan []byte) { 
    fmt.Println("event") 
    event := <-eventCh 
    newEvent := createNewEvent(event) 
    err := db.Insert(&newEvent) 

    if err != nil { 
     panic(err) 
    } 

} 

WriteEventToDbが実行されない理由を任意のアイデアを?それはゴルーチンを開始するために取得する前に、

答えて

6

あなたのファンクションブロック:

eventCh := make(chan []byte) 
eventCh <- body 

これは、新しいチャネルを作成し、それが他のルーチンにオフに渡すことができます前に、それはそのチャネルにメッセージを送信しようとします。チャネルはバッファリングされておらず、何も読み取られていないので、sendは無期限にブロックします。

+0

答えをありがとう。それが問題でした。私はあなたの答えを見た瞬間も同じことを認識しました。 – mrjd

関連する問題