go / intermediate
Snippet
Nicht-blockierende Kanal-Operationen mit Select
Die 'select'-Anweisung lässt eine Goroutine auf mehrere Kommunikationsoperationen warten. Die Verwendung eines 'default'-Falls ermöglicht nicht-blockierendes Senden und Empfangen, das sofort ausgeführt wird, wenn kein Kanal bereit ist.
snippet.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package mainimport "fmt"func main() {messages := make(chan string)signals := make(chan bool)select {case msg := <-messages:fmt.Println("received message", msg)default:fmt.Println("no message received")}msg := "hi"select {case messages <- msg:fmt.Println("sent message", msg)default:fmt.Println("no message sent")}}
Erklärung
1
select { ... }
Blockiert, bis einer der Fälle ausgeführt werden kann, es sei denn, ein default-Fall ist vorhanden.
2
case msg := <-messages:
Versucht, einen Wert aus dem messages-Kanal zu empfangen.
3
default:
Wird ausgeführt, wenn kein anderer Fall bereit ist, wodurch die select-Operation nicht-blockierend wird.