Случаи, которые следует знать при использовании операторов выбора в Golang

В языке Go оператор select похож на оператор switch , но в операторе select оператор case относится к коммуникации, т. е. операции отправки или получения по каналу.

Случаи, которые следует знать при использовании операторов выбора в Golang

Синтаксис:

select{

case SendOrReceive1: // Lệnh
case SendOrReceive2: // Lệnh
case SendOrReceive3: // Lệnh
.......
default: // Lệnh

В этой статье мы узнаем, как использовать регистр по умолчанию, чтобы избежать взаимоблокировки. Но сначала давайте выясним, что такое случай взаимоблокировки при использовании команды select в Golang ?

Что нужно знать о случаях взаимоблокировки в Golang

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

Например:

// Chương trình Go minh hoạc
// cách deadlock phát sinh
package main 

// Hàm chính
func main() { 

	// Tạo một kênh
	// Deadlock phát sinh bởi
	// không có goroutine đang viết
	// vào kênh này, vì thế
	// lệnh select đã bị khóa mãi mãi
	c := make(chan int) 
	select { 
	case <-c: }="" }="">

Результат:

fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan receive]:
main.main()

Чтобы избежать этой ситуации, мы используем регистр по умолчанию в операторе select. Другими словами, когда в программе возникает взаимоблокировка, выполняется вариант оператора select по умолчанию, чтобы избежать взаимоблокировки. Как и в примере ниже, мы используем регистр по умолчанию в операторе select, чтобы избежать взаимоблокировки.

Например:

// Chương trình Go minh họa cách giải quyết
// vấn đề deadlock bằng case mặc định
package main 

import "fmt"

// Hàm chính
func main() { 

	// Tạo 1 kênh
	c := make(chan int) 
	select { 
	case <-c: default:="" fmt.println("!..="" default="" case..!")="" }="" }="">

Результат:

!.. Default case..!

Вы также можете использовать случай по умолчанию, когда оператор select имеет только нулевой канал . Как показано в примере ниже, канал c равен нулю, поэтому выполняется вариант по умолчанию, если вариант по умолчанию здесь недоступен, то программа блокируется навсегда и возникает взаимоблокировка.

Например:

// Chương trình Go minh họa
// chạy case mặc định
package main 

import "fmt"

// Hàm chính
func main() { 

	// Tạo một kênh
	var c chan int

	select { 
	case x1 := <-c: fmt.println("value:="" ",="" x1)="" default:="" fmt.println("default="" case..!")="" }="" }="">

Результат:

Default case..!

Оставить комментарий

Втянет ли Европа в гипотетическую ядерную войну между США, Израилем и Ираном? Объяснение правил НАТО.

Втянет ли Европа в гипотетическую ядерную войну между США, Израилем и Ираном? Объяснение правил НАТО.

Руководство по статьям 4 и 5 НАТО, правилам самообороны ООН и объяснение того, почему консультации не означают автоматического вступления Европы в войну.

Может ли Иран уже обладать ядерным оружием? Как интерпретировать доказательства.

Может ли Иран уже обладать ядерным оружием? Как интерпретировать доказательства.

Оцените утверждения об Иране в шесть этапов, различая обогащение урана, разработку оружия и подтвержденное обладание им.

Ядерные структуры США и Израиля: что на самом деле объясняют общедоступные источники.

Ядерные структуры США и Израиля: что на самом деле объясняют общедоступные источники.

Понимание полномочий по принятию решений в ядерной сфере в шесть этапов, включая контроль со стороны гражданского населения США и ограничения общедоступной информации об Израиле.

Ормузский пролив в 2026 году: что говорят официальные источники о перебоях в судоходстве.

Ормузский пролив в 2026 году: что говорят официальные источники о перебоях в судоходстве.

Справочник по официальным данным о сбоях в судоходстве в Ормузском проливе в 2026 году, заявлениям, связанным с Ираном, подтвержденным инцидентам и тому, что остается неясным.

Может ли гипотетический ядерный удар США и Израиля по Ирану привести к Третьей мировой войне?

Может ли гипотетический ядерный удар США и Израиля по Ирану привести к Третьей мировой войне?

Основанное на источниках руководство по рискам ядерной эскалации, правилам Устава ООН и статье 5 НАТО в строго гипотетическом сценарии с Ираном.

Как подготовиться к гипотетическому отключению электроэнергии, вызванному электромагнитным импульсом: 5 шагов для гражданских лиц.

Как подготовиться к гипотетическому отключению электроэнергии, вызванному электромагнитным импульсом: 5 шагов для гражданских лиц.

Для подготовки к отключению электроэнергии используйте пять шагов; сценарии, связанные с ядерным взрывом и электромагнитным импульсом, являются гипотетическими, и в первую очередь необходимо следовать официальным инструкциям по размещению в убежищах.

Как оценить киберугрозы, не предполагая Третью мировую войну: пошаговое руководство из 5 шагов.

Как оценить киберугрозы, не предполагая Третью мировую войну: пошаговое руководство из 5 шагов.

Используйте 5 защитных шагов для подтверждения кибернарушения, защиты учетных записей домохозяйств и предотвращения ошибочного принятия отключения электроэнергии за войну.

Ядерная зима: как оценить глобальные климатические последствия гипотетического удара по Ирану.

Используйте эти 5 шагов, чтобы оценить климатические последствия гипотетического удара Ирана, сравнить допущения моделей и избежать необоснованных прогнозов.

Сколько времени может потребоваться Земле для восстановления после гипотетической ядерной войны?

Сколько времени может потребоваться Земле для восстановления после гипотетической ядерной войны?

Ознакомьтесь с шестью шагами по чтению научных работ по вопросам климата, продовольствия и восстановления экосистем после гипотетического ядерного конфликта.

Контрольный список мер по подготовке к ядерным осадкам: необходимые припасы и шаги по обустройству убежища.

Контрольный список мер по подготовке к ядерным осадкам: необходимые припасы и шаги по обустройству убежища.

Соберите практичный комплект для подготовки к радиоактивным осадкам за шесть шагов, включающий герметично упакованные продукты питания и воду, радиоприемник, медикаменты и инструкции по обустройству укрытия.