Dans le langage Go, l'instruction select est comme l'instruction switch , mais dans l'instruction select, l'instruction case fait référence à la communication, c'est-à-dire à l'opération d'envoi ou de réception sur le canal.

Syntaxe:
select{
case SendOrReceive1: // Lệnh
case SendOrReceive2: // Lệnh
case SendOrReceive3: // Lệnh
.......
default: // Lệnh
Dans cet article, nous allons apprendre à utiliser le cas par défaut pour éviter le blocage. Mais d’abord, découvrons quel est le cas de blocage lors de l’utilisation de la commande Golang select ?
Informations à connaître sur les cas de blocage dans Golang
Blocage : lorsque vous essayez de lire ou d'écrire des données à partir d'un canal mais que le canal est vide. Il bloque donc l'exécution actuelle de la goroutine et passe le contrôle à d'autres goroutines, mais si aucune autre goroutine n'est disponible ou si d'autres goroutines sont au repos en raison de cette situation, le programme plantera. Ce phénomène est appelé blocage. Comme le montre l’exemple ci-dessous :
Par exemple:
// 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: }="" }="">
Résultat:
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
main.main()
Pour éviter cette situation, nous utilisons le cas par défaut dans l'instruction select. En d'autres termes, lorsqu'un blocage se produit dans le programme, le cas par défaut de l'instruction select est exécuté pour éviter le blocage. Comme dans l'exemple ci-dessous, nous utilisons le cas par défaut dans l'instruction select pour éviter le blocage.
Par exemple:
// 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..!")="" }="" }="">
Résultat:
!.. Default case..!
Vous êtes également autorisé à utiliser le cas par défaut lorsque l' instruction select n'a qu'un canal nul . Comme indiqué dans l'exemple ci-dessous, le canal c est nul, donc le cas par défaut est exécuté si le cas par défaut ici n'est pas disponible, alors le programme se bloquera pour toujours et un blocage se produira.
Par exemple:
// 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..!")="" }="" }="">
Résultat:
Default case..!