2019-10-07 22:30:13 +03:00

43 lines
1.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Go's _select позволяет вам ждать нескольких
// операций на канале. Сочетание горутин и каналов
// с помощью select'а - мощная функция Go.
package main
import (
"fmt"
"time"
)
func main() {
// В нашем примере мы будем выбирать между двумя
// каналами.
c1 := make(chan string)
c2 := make(chan string)
// Каждый канал получит значение через некоторое время,
// например, для моделирования блокировки RPC-операций,
// выполняемых в параллельных горутинах.
go func() {
time.Sleep(1 * time.Second)
c1 <- "one"
}()
go func() {
time.Sleep(2 * time.Second)
c2 <- "two"
}()
// Мы будем использовать `select`, чтобы ожидать
// оба значения одновременно, печатая каждое из
// них по мере поступления.
for i := 0; i < 2; i++ {
select {
case msg1 := <-c1:
fmt.Println("received", msg1)
case msg2 := <-c2:
fmt.Println("received", msg2)
}
}
}