select ist ein häufig verwendetes Schlüsselwort in der Go-Sprache. Es wird verwendet, um E/A-Vorgänge im Zusammenhang mit Kanälen zu überwachen.
Wenn mehrere Fälle ausgeführt werden können, wählt Select zufällig und fair einen zur Ausführung aus. Andere werden nicht hingerichtet. (Lernempfehlung: go)
Ansonsten:
Wenn eine Standardklausel vorhanden ist, wird die Anweisung ausgeführt.
Ohne die Standardklausel wird „select“ blockiert, bis eine Kommunikation ausgeführt werden kann; Go bewertet den Kanal oder Wert nicht erneut.
Grundlegende Verwendung
//select基本用法 select { case <- chan1: // 如果chan1成功读到数据,则进行该case处理语句 case chan2 <- 1: // 如果成功向chan2写入数据,则进行该case处理语句 default: // 如果上面都没有成功,则进入default处理流程
Wenn ein oder mehrere E/A-Vorgänge abgeschlossen werden können, wählt das Go-Laufzeitsystem zufällig einen zur Ausführung aus, andernfalls, Falls vorhanden Wenn es keine Standardverzweigung gibt, wird die Select-Anweisung blockiert, bis mindestens eine E/A-Operation ausgeführt werden kann.
start := time.Now() c := make(chan interface{}) ch1 := make(chan int) ch2 := make(chan int) go func() { time.Sleep(4*time.Second) close(c) }() go func() { time.Sleep(3*time.Second) ch1 <- 3 }() go func() { time.Sleep(3*time.Second) ch2 <- 5 }() fmt.Println("Blocking on read...") select { case <- c: fmt.Printf("Unblocked %v later.\n", time.Since(start)) case <- ch1: fmt.Printf("ch1 case...") case <- ch2: fmt.Printf("ch1 case...") default: fmt.Printf("default go...") }
Führen Sie den obigen Code aus ist immer noch weniger als 3 Sekunden. Daher wird das aktuelle Programm standardmäßig ausgeführt.
Das obige ist der detaillierte Inhalt vonBlockiert Golang nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!