Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpGrGs 150 of 280 menu
◀ ▶

Запуск горутины в Go

Ключевое слово перед вызовом отправляет функцию работать отдельно. Обычный вызов ждет возврата, а с go управление сразу переходит к следующей строке, пока тело функции крутится в другой ветке.

Если main быстро доходит до конца, процесс завершается и фоновая печать может не успеть. В следующем уроке разберем надежное ожидание; здесь для наглядности после запуска можно ненадолго приостановить main через time.Sleep, лишь чтобы увидеть строку на экране.

Запустим короткую функцию с печатью:

package main import ( "fmt" "time" ) func say() { fmt.Println("from worker") } func main() { go say() time.Sleep(10 * time.Millisecond) }

Без паузы строка "from worker" часто пропадает: main заканчивается раньше ветки. Пауза здесь только для демонстрации, в реальной программе так не полагаются.

Тот же прием с анонимной функцией:

package main import ( "fmt" "time" ) func main() { go func() { fmt.Println("inline") }() time.Sleep(10 * time.Millisecond) }

Дана функция:

func mark() { fmt.Println("mark") }

В main запустите mark отдельной веткой и коротко подождите, чтобы строка успела напечататься.

Дан следующий код:

package main import "fmt" func ping() { fmt.Println("ping") } func main() { go ping() }

Скажите, почему "ping" может не появиться на экране.

Скажите, чем отличается обычный вызов say от запуска say с ключевым словом из первого примера.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить