38 lines
1.3 KiB
Go
38 lines
1.3 KiB
Go
// Мы можем использовать каналы для синхронизации
|
||
// выполнения между горутинами. Вот пример
|
||
// использования блокирующего получения для ожидания
|
||
// завершения работы горутины. При ожидании завершения
|
||
// нескольких процедур вы можете использовать [WaitGroup](waitgroups).
|
||
|
||
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"time"
|
||
)
|
||
|
||
// Эту функцию мы будем запускать в горутине. Канал
|
||
// `done` будет использован для оповещения другой
|
||
// горутины о том, что функция выполнена успешно.
|
||
func worker(done chan bool) {
|
||
fmt.Print("working...")
|
||
time.Sleep(time.Second)
|
||
fmt.Println("done")
|
||
|
||
// Отправить значение, чтобы сказать что функция
|
||
// выполнена успешно.
|
||
done <- true
|
||
}
|
||
|
||
func main() {
|
||
|
||
// Запустите воркера в горутине и передайте ему канал
|
||
// для оповещения.
|
||
done := make(chan bool, 1)
|
||
go worker(done)
|
||
|
||
// Блокируйте, пока мы не получим уведомление от
|
||
// воркера из канала.
|
||
<-done
|
||
}
|