Практика на горутины в Go
Дан следующий код:
func hello() {
fmt.Println("hi")
}
Запустите hello отдельной веткой
и дождитесь печати перед выводом
"bye".
Дан следующий код:
func twice(wg *sync.WaitGroup) {
defer wg.Done()
fmt.Println("run")
}
Дважды запустите twice и дождитесь
обеих веток.
Дан следующий код:
for j := 1; j <= 2; j++ {
go func() {
fmt.Println(j)
}()
}
Оформите цикл с ожиданием двух веток
и скажите, какие числа должны появиться
на экране в Go 1.27.
Дан следующий код:
func main() {
go func() {
panic("boom")
}()
}
Скажите, успеет ли main завершиться
спокойно без ожидания и без перехвата
внутри ветки.
Даны функции:
func a(wg *sync.WaitGroup) {
defer wg.Done()
fmt.Println("A")
}
func b(wg *sync.WaitGroup) {
defer wg.Done()
fmt.Println("B")
}
Запустите a и b параллельно
и дождитесь обеих перед печатью
"end".
Дан следующий код:
count := runtime.GOMAXPROCS(0)
var wg sync.WaitGroup
wg.Add(5)
for i := 0; i < 5; i++ {
go func() {
defer wg.Done()
}()
}
wg.Wait()
Скажите, равно ли count числу
запущенных веток в этом фрагменте.