Dieser Artikel führt Sie hauptsächlich in das Tutorial zur Verwendung von Switch und Select in Golang ein. Der Artikel stellt die Verwendung von Switch-Anweisung und Select-Anweisung ausführlich anhand von Beispielcode vor, der für jeden von gewisser Bedeutung ist In Bezug auf den Wert des Lernens können Freunde in Not dem Herausgeber folgen, um gemeinsam zu lernen.
Dieser Artikel stellt Ihnen hauptsächlich die relevanten Inhalte zur Verwendung von Switch und Select in Golang vor. Er wird als Referenz und zum Lernen geteilt 🎜>
1. Switch-AnweisungDie Switch-Anweisung bietet eine bedingte Ausführungsmethode mit mehreren Zweigen. Jeder Fall kann einen
-Ausdruck
Go wechselt jedes Element in der Reihenfolge von oben nach unten. Der Case-Ausdruck in einer Case-Anweisung wird ausgewertet. Solange festgestellt wird, dass der Ausdruck das gleiche Ergebnis wie der Switch-Ausdruck hat, wird die Case-Anweisung ausgewählt. Der Rest der case-Anweisungen wird ignoriert. Beispielsweise kann die Switch-Anweisung auch Initialisierungswörter enthalten, und ihr Aussehen und ihre Schreibweise sind genau gleich:
var name string ... switch name { case "Golang": fmt.Println("Golang") case "Rust": fmt.Println("Rust") default: fmt.Println("PHP是世界上最好的语言") }
names := []string{"Golang","java","PHP"} switch name:=names[0];name { case "Golang": fmt.Println("Golang") ... default: fmt.Println("Unknown") }
und der allgemeinen Form. Der erste Punkt ist, dass das, was auf das Schlüsselwort case folgt, kein Ausdruck, sondern ein Typbezeichner ist. Ein Typspezifizierer besteht aus mehreren Typliteralen, und mehrere Typliterale werden durch Kommas getrennt. Der zweite Punkt ist, dass sein Schalterausdruck etwas ganz Besonderes ist. Dieser spezielle Ausdruck spielt auch die Rolle der Typzusicherung, aber sein Ausdruck ist sehr speziell, wie zum Beispiel: , wobei v einen Wert vom Typ Schnittstelle
darstellen muss. Dieser Ausdruckstyp kann nur in Typwechselanweisungen vorkommen und nur als Wechselausdrücke dienen. Ein Beispiel für eine Typ-Switch-Anweisung lautet wie folgt:
„
v := 11 switch i := interface{}(v).(type) { case int, int8, int16, int32, int64: fmt.Println("A signed integer:%d. The type is %T. \n", v, i) case uint, uint8, uint16, uint32, uint64: fmt.Println("A unsigned integer: %d. The type is %T. \n", v, i) default: fmt.Println("Unknown!") }
A signed integer:11. The type is int.
2. Select-Anweisung
Die Funktion von Golangs Select ähnelt Select, Poll und Epoll dient der Überwachung des E/A-Vorgangs. Wenn ein E/A-Vorgang auftritt, wird die entsprechende Aktion ausgelöst.
Beispiel:
ch1 := make (chan int, 1) ch2 := make (chan int, 1) ... select { case <-ch1: fmt.Println("ch1 pop one element") case <-ch2: fmt.Println("ch2 pop one element") }
Die break-Anweisung kann auch in der case-Anweisung in der select-Anweisung enthalten sein. Seine Funktion besteht darin, die Ausführung der aktuellen Select-Anweisung sofort zu beenden. Unabhängig davon, ob in der Case-Anweisung, zu der sie gehört, nicht ausgeführte Anweisungen vorhanden sind.
[Verwenden Sie die Auswahl, um den Timeout-Mechanismus zu implementieren]
wie folgt:
beendet
. Anstatt den Lesevorgang von ch immer zu blockieren. Dies implementiert die Timeout-Einstellung für CH-Lesevorgänge.
timeout := make(chan bool, 1) go func() { time.Sleep(time.Second * 10) timeout <- true }() select { case <-pssScanResponseChan: case <-timeout: fmt.PrintIn("timeout!") }
Das Folgende ist interessanter.
Wenn die Select-Anweisung Standard enthält:
ch1 := make (chan int, 1) ch2 := make (chan int, 1) select { case <-ch1: fmt.Println("ch1 pop one element") case <-ch2: fmt.Println("ch2 pop one element") default: fmt.Println("default") }
lautet wie folgt:
ch := make (chan int, 1) ch <- 1 select { case ch <- 2: default: fmt.Println("channel is full !") }
此外,利用default特性,我们可以使用select语句将chan清空,如下:
flag := false for { select { case <-pssScanResponseChan: continue default: flag = true } if true == flag { break } }
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung der Switch-Anweisung und der Select-Anweisung in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!