@VadimRublev
Изучаю Go, + фронт (ванильный).

Чем запуск горутины отличается от запуска функции?

Почему просто функция нормально срабатывает без задержки в 4 сек., а как горутина - пустой результат?
func main() {
    for i := 0; i < 5; i++ {
        go sleepyGopher(i)
    }
    //time.Sleep(4 * time.Second)
}

func sleepyGopher(id int) {
    time.Sleep(3 * time.Second)
    fmt.Println("... ", id, " snore ...")
}

В чём особенность работы горутины?

https://play.golang.org/p/QAsBbJxbmsk
  • Вопрос задан
  • 105 просмотров
Решения вопроса 2
@ghostiam
На Go писатель, серверов пинатель.
Потому-что горутина запускается в новом "потоке" приложения и главный поток не блокируется.
Чтобы дождаться завершения работы всех горутин, нужно использовать sync.WaitGroup
https://gobyexample.com/waitgroups
https://golang.org/pkg/sync/#example_WaitGroup
Ответ написан
alfss
@alfss
Потому что нужно дождаться исполнения горутин, а вы просто их запускает и завершает программу. Почитайте что такое горутин. golang-book.ru/chapter-10-concurrency.html
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@VadimRublev Автор вопроса
Изучаю Go, + фронт (ванильный).
Выполнение потока (работа функции, вызвавшей горутину) прерывается независимо от срабатывания горутины. Грубо: успела горутина отработать - молодец, не успела - не судьба.
В отличии от функции - завершение которой поток обязательно дождётся.
Чтобы приравнять в этом смысле горутину к функции, надо вместе с горутиной либо указать хорошую задержку выполнения потока (что не даёт гарантии выполнения ВСЕХ горутин, тут как со временем угадаешь); либо использовать sync.WaitGroup (тогда горутины гарантировано отработают - как функции).
Верно?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы