În limba Go, instrucțiunea select este ca instrucțiunea switch , dar în instrucțiunea select, declarația case se referă la comunicare, adică la operațiunea de trimitere sau primire pe canal.

Sintaxă:
select{
case SendOrReceive1: // Lệnh
case SendOrReceive2: // Lệnh
case SendOrReceive3: // Lệnh
.......
default: // Lệnh
În acest articol, vom învăța cum să folosim cazul implicit pentru a evita blocajul. Dar mai întâi, să aflăm care este cazul de blocare atunci când utilizați comanda Golang select?
Lucruri de știut despre cazul de blocaj din Golang
Deadlock: Când încercați să citiți sau să scrieți date de pe un canal, dar canalul este gol. Așadar, blochează execuția curentă a goroutinei și trece controlul altor goroutine, dar dacă nu este disponibilă nicio altă goroutine sau alte goroutine se odihnesc din cauza acestei situații, programul se va bloca. Acest fenomen se numește blocaj. După cum se arată în exemplul de mai jos:
De exemplu:
// 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: }="" }="">
Rezultat:
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
main.main()
Pentru a evita această situație, folosim cazul implicit în instrucțiunea select. Cu alte cuvinte, atunci când are loc blocajul în program, cazul implicit al instrucțiunii select este executat pentru a evita blocajul. Ca în exemplul de mai jos, folosim cazul implicit în instrucțiunea select pentru a evita blocajul.
De exemplu:
// 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..!")="" }="" }="">
Rezultat:
!.. Default case..!
De asemenea, vi se permite să utilizați cazul implicit atunci când instrucțiunea select are doar un canal zero . După cum se arată în exemplul de mai jos, canalul c este zero, deci cazul implicit este executat dacă cazul implicit aici nu este disponibil, atunci programul se va bloca pentru totdeauna și apare un blocaj.
De exemplu:
// 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..!")="" }="" }="">
Rezultat:
Default case..!