Ответы пользователя по тегу Go
  • Почему после "смерти" воркера сыпятся ошибки?

    @qazqazasda
    Там же практически по-русски написано: у вас deadlock


    У вас тут даже два дидлока

    У вас range по каналу result никогда не завершится.
    for msg := range results

    Вот здесь пример как правильно:
    https://gobyexample.com/range-over-channels

    К примеру, канал results должен быть закрыт ранее, чем вы входите в
    for msg := range results

    Но и это еще не все.

    Вы никогда не дойдете до close(jobs), потому что у вас стоит wg.Wait(), который завершиться только когда отработают все ваши 10 штук wg.Done()

    Но wg.Done() не отработают, как как цикл
    for j := range jobs {
    завершиться только тогда когда будет вызван close(jobs),

    а он будет вызван после всех wg.Done(), а wg.Done() будет вызвано после close(jobs), а close(jobs) ..............
    Ответ написан
    Комментировать