【问题标题】:Goroutine does not runGoroutine 不运行
【发布时间】:2018-04-26 16:33:46
【问题描述】:

我正在尝试使用 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 不运行吗?

【问题讨论】:

    标签: go goroutine


    【解决方案1】:

    你的函数在启动 goroutine 之前就阻塞了:

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

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

    【讨论】:

    • 感谢您的回答。这就是问题所在。当我看到你的回答时,我也意识到了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多