вопрос, есть два цикла фор в форе, внутренный вор подписан
for {
someLoop:
for {
select {
case someErr := <-errChan:
break someLoop
}
}
log.Println("After break readMessagesLoop!")
if err := conn.Close(); err != nil {
log.Printf("[main] conn.Close Error: %v", err)
}
if err := ch.Close(); err != nil {
log.Printf("[main] ch.Close Error: %v", err)
}
log.Println("Restart worker")
}
(Надеюсь код номрально вставился)
Так вот, у меня в консоли высвечивается
After break readMessagesLoop!
ПОтом
[main] conn.Close Error: Exception (504) Reason: "channel/connection is not open"
И всё) дальше код почему то не едёт, хотя должен был во внешнем лупе заново начаться, если закоментриую закрытие коннекшенов и каналов, то всё нормально крутиться,))) Очень странно))))
По факту код должен был без проблем дойти до конца же и высветить log.Println("Restart worker") И начаться опять, но нет, буквально последний лог еррора и всё, стоит на месте, не паникует ничего) Если закоментировать именно if err := conn.Close(); err != nil { log.Printf("[main] conn.Close Error: %v", err) } if err := ch.Close(); err != nil { log.Printf("[main] ch.Close Error: %v", err) } Эту часть, то всё будет дозодить до log.Println("Restart worker") и начинаться цикл заново)
а зачем вам select в данном примере, если вы читаете только из 1 канала? уберите его и запустите, (только добавьте if на someErr, ну точнее ok, хотя смотря что вам нужно))
Обсуждают сегодня