In der Sprache Go ist die Select-Anweisung wie die Switch-Anweisung , aber in der Select-Anweisung bezieht sich die Case-Anweisung auf die Kommunikation, d. h. auf den Sende- oder Empfangsvorgang auf dem Kanal.

Syntax:
select{
case SendOrReceive1: // Lệnh
case SendOrReceive2: // Lệnh
case SendOrReceive3: // Lệnh
.......
default: // Lệnh
In diesem Artikel erfahren Sie, wie Sie den Standardfall verwenden, um Deadlocks zu vermeiden. Zunächst erfahren Sie jedoch, was ein Deadlock-Fall bei der Verwendung des Select-Befehls in Golang ist.
Wissenswertes zum Deadlock-Fall in Golang
Deadlock: Wenn Sie versuchen, Daten aus einem Kanal zu lesen oder zu schreiben, dieser aber nicht verfügbar ist, blockiert dies die aktuelle Ausführung der Goroutine und überträgt die Steuerung an andere Goroutinen. Ist jedoch keine andere Goroutine verfügbar oder befinden sich andere aufgrund dieser Situation im Leerlauf, stürzt das Programm ab. Dieses Phänomen wird als Deadlock bezeichnet. Wie im folgenden Beispiel gezeigt:
Zum Beispiel:
// 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: }="" }="">
Ergebnis:
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
main.main()
Um diese Situation zu vermeiden, verwenden wir den Standardfall in der Select-Anweisung. Anders ausgedrückt: Wenn im Programm ein Deadlock auftritt, wird der Standardfall der Select-Anweisung ausgeführt, um einen Deadlock zu vermeiden. Wie im folgenden Beispiel verwenden wir den Standardfall in der Select-Anweisung, um einen Deadlock zu vermeiden.
Zum Beispiel:
// 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..!")="" }="" }="">
Ergebnis:
!.. Default case..!
Sie können den Standardfall auch verwenden, wenn die Select -Anweisung nur einen Nullkanal hat . Wie im folgenden Beispiel gezeigt, ist Kanal c Null, daher wird der Standardfall ausgeführt. Ist der Standardfall hier nicht verfügbar, blockiert das Programm dauerhaft und es kommt zu einem Deadlock.
Zum Beispiel:
// 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..!")="" }="" }="">
Ergebnis:
Default case..!