Горутина не запускается


Я пытаюсь использовать 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 2

1 ответ:

Ваша функция блокируется перед запуском goroutine:

eventCh := make(chan []byte)
eventCh <- body
Это создает новый канал, и прежде чем он может быть передан в любую другую процедуру, он пытается отправить сообщение в этот канал. Поскольку канал не буферизован и с него ничего не считывается, отправка блокируется на неопределенный срок.