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