РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
831 of 1593 menu

Default в select

Ключевое слово default в конструкции select позволяет выполнить код, если ни один из каналов не готов к отправке или получению данных. Это делает операцию неблокирующей. В первом параметре мы передаем каналы для чтения или записи, во втором параметре мы указываем действие по умолчанию, которое выполнится, если ни один канал не готов.

Синтаксис

select { case <-ch1: // Действие при получении из ch1 case ch2 <- val: // Действие при отправке в ch2 default: // Действие, если ни один канал не готов }

Пример

Давайте создадим небуферизированный канал и попробуем получить из него данные с использованием default:

package main import "fmt" func main() { ch := make(chan int) select { case val := <-ch: fmt.Println("Received:", val) default: fmt.Println("No data available") } }

Результат выполнения кода:

"No data available"

Пример

Давайте попробуем отправить данные в канал, который не имеет получателя:

package main import "fmt" func main() { ch := make(chan int) select { case ch <- 42: fmt.Println("Sent: 42") default: fmt.Println("Cannot send, no receiver") } }

Результат выполнения кода:

"Cannot send, no receiver"

Пример

Давайте рассмотрим ситуацию, когда один из каналов готов к операции, и default не выполняется:

package main import "fmt" func main() { ch := make(chan int, 1) ch <- 100 select { case val := <-ch: fmt.Println("Received:", val) default: fmt.Println("No data available") } }

Результат выполнения кода:

"Received: 100"

Пример

Давайте используем default для неблокирующей проверки нескольких каналов:

package main import "fmt" func main() { ch1 := make(chan int) ch2 := make(chan string) select { case val := <-ch1: fmt.Println("From ch1:", val) case msg := <-ch2: fmt.Println("From ch2:", msg) default: fmt.Println("No data from any channel") } }

Результат выполнения кода:

"No data from any channel"

Смотрите также

  • инструкцию select,
    которая позволяет работать с несколькими каналами
  • оператор chan,
    который используется для создания каналов
  • функцию close,
    которая закрывает канал для отправки данных
  • конструкцию goroutine,
    которая запускает функции в параллельных потоках
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить