Ну шо, с наступающим, пацаны и пацанессы...
Даже в праздник не прерываем челлендж. Сегодня чуть-чуть нудно про select.
Оператор select позволяет подпрограмме ожидать выполнения нескольких операций связи.
A select блокируется до тех пор, пока не сможет выполняться одно из его обращений, затем оно выполняет это обращение. Оно выбирает одно случайным образом, если готовы несколько. Оператор select аналогичен оператору switch, но в операторе select оператор case относится к связи, т.е. операции отправки или получения по каналу.
Пример:
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)
}
}
}
Вот такие дела.
Попозже ещё напишу мыслишки свои всякие в отрыве от челленджа...🤡
Роадмап бэкенда: 5% — 5%
Роадмап Go: 36% — 37%
Оценка за день: 4/5