Goroutine没有跑

时间:2017-11-13 21:19:31

标签: go goroutine

我尝试使用goroutine将项目写入数据库。然而,由于某些原因,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为什么不运行?

1 个答案:

答案 0 :(得分:6)

你的功能在启动goroutine之前阻塞:

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

这创建了一个新频道,在它可以传递给任何其他例程之前,它会尝试向该频道发送消息。由于通道是无缓冲的,并且没有任何内容正在从中读取,因此发送无限期地阻塞。