, um Ihnen Ihr Verständnis von Select in Golang näher zu bringen. Ich hoffe, Freunden zu helfen, die es brauchen!
Die Syntax der Select-Anweisung und der Switch-Anweisung ist sehr ähnlich, aber der Fall in Select muss eine Kommunikationsoperation (eine Kanaloperation) sein. Die Ausführungslogik lautet: Welche Kanaloperation hinter dem Case erfolgreich ausgeführt werden kann, dann wird der Codeblock unter dem Case ausgeführt
. Können mehrere Fälle gleichzeitig erfolgreich ausgeführt werden, wird einer davon zufällig ausgewählt. Wenn keiner der Fälle erfolgreich ausgeführt werden kann, wird der standardmäßige Codeblock ausgeführt. Wenn es keinen Standardwert gibt, wird es blockiert und ein Deadlock-Fehler zurückgegeben.E/A-Vorgänge überwachen und entsprechende Aktionen auslösen, wenn E/A-Vorgänge auftreten.
Diese Aussage ist in der Tat das Anwendungsszenario von Select, aber verwechseln Sie sie nicht mit der Select-Anweisung In diesem Fall wird die Channel-Operation ausgeführt! Dieses Verständnis ist falsch! Was Select tatsächlich auswählt, ist der Fall, in dem die Kanaloperation erfolgreich ausgeführt werden kann, und dann wird der Codeblock in diesem Fall ausgeführt.
Zum Beispiel, wenn ein Kanal c1 mit einem Datenelement geschrieben wird
Wenn wir die folgende Select-Beurteilungsaussage habenc1 := make(chan string, 1)c1 <- "Hello World!"Nach dem Login kopieren
select { case <-c1: fmt.Println("Case 1 is selected") case c1<-"Hello World!": fmt.Println("Case 2 is selected") default : fmt.Println("Default is selected")}
Sie erhalten die folgenden Ergebnisse
Case 1 is selected
Da c1 mit einem Datenelement geschrieben wird, Wir können erfolgreich „von c1 ein Datenelement lesen“. Das heißt, der erste Fall kann erfolgreich ausgeführt werden. Daher wird der Codeblock im ersten Fall schließlich ausgeführt.
Das obige ist der detaillierte Inhalt vonÜber das Verständnis von select in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!