Heim Backend-Entwicklung Python-Tutorial Detaillierte Erläuterung der Verwendung der Switch-Anweisung und der Select-Anweisung in Golang

Detaillierte Erläuterung der Verwendung der Switch-Anweisung und der Select-Anweisung in Golang

Jun 29, 2017 pm 03:30 PM
golang select switch

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-Anweisung

Die Switch-Anweisung bietet eine bedingte Ausführungsmethode mit mehreren Zweigen. Jeder Fall kann einen
-Ausdruck

oder einen Typbezeichner enthalten. Ersteres kann auch als Case-Ausdruck bezeichnet werden. Daher ist die Switch-Anweisung in der Go-Sprache in eine Ausdrucks-Switch-Anweisung und eine Typ-Switch-Anweisung unterteilt.


1. Ausdruckswechselanweisung


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是世界上最好的语言") 
}
Nach dem Login kopieren


2. Geben Sie die Switch-Anweisung <🎜 ein >< Es gibt zwei Unterschiede zwischen der Typ-Switch-Anweisung 🎜>
names := []string{"Golang","java","PHP"} 
switch name:=names[0];name { 
case "Golang": 
 fmt.Println("Golang") 
... 
default: 
 fmt.Println("Unknown") 
}
Nach dem Login kopieren

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.(type)

Hier weisen wir das Ergebnis des Switch-Ausdrucks einer Variablen zu. Auf diese Weise können wir dieses Ergebnis in der Switch-Anweisung verwenden. Nachdem dieser Code ausgeführt wurde, lautet die Ausgabe: „


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!") 
}
Nach dem Login kopieren
Lassen Sie uns abschließend über den Fallthrough sprechen. Es ist sowohl ein Schlüsselwort als auch eine Aussage. Eine Fallthrough-Anweisung kann in eine Case-Anweisung innerhalb einer Ausdrucks-Switch-Anweisung eingefügt werden. Seine Funktion besteht darin, die Kontrolle an den nächsten Fall zu übergeben. Bitte beachten Sie jedoch, dass die Fallthrough-Anweisung nur als letzte Anweisung in der Case-Anweisung erscheinen kann. Darüber hinaus ist die Case-Anweisung, die sie enthält, nicht die letzte Case-Anweisung der Switch-Anweisung, zu der sie gehört.

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:


Beachten Sie, dass die Codeform von select der von switch sehr ähnlich ist, aber die Operationsanweisungen in Bei Auswahl ist nur eine [IO-Operation] möglich.


In diesem Beispiel wartet select, bis eine bestimmte Case-Anweisung abgeschlossen ist, d. h. bis die Daten erfolgreich von CH1 oder CH2 gelesen wurden. Die Select-Anweisung endet.
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") 
}
Nach dem Login kopieren


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:


Wenn das Timeout auftritt Zeit ist Betriebszeit, Fall2 wird erfolgreich ausgeführt. Die Select-Anweisung wird also

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!") 
}
Nach dem Login kopieren

Das Folgende ist interessanter.
Wenn die Select-Anweisung Standard enthält:


Zu diesem Zeitpunkt sind case1 und case2 beide leer, da ch1 und ch2 beide leer sind wird erfolgreich gelesen. Wählen Sie dann aus, um die Standardanweisung auszuführen.


Aufgrund dieser Standardfunktion können wir die Select-Anweisung verwenden, um zu erkennen, ob der Kanal voll ist.
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") 
}
Nach dem Login kopieren


lautet wie folgt:


Weil der Kanal beim Einfügen von 1 bereits voll ist. Wenn der Kanal 2 eingefügt werden soll, ist dies der Fall festgestellt, dass ch bereits voll ist (case1 ist blockiert), dann führt select die Standardanweisung aus. Auf diese Weise ist es möglich zu erkennen, ob der Kanal voll ist, anstatt ständig zu warten.


Wenn wir beispielsweise einen Dienst haben und eine Anfrage eingeht, generieren wir einen Job und werfen ihn in den Kanal, und andere Coroutinen holen den Job vom Kanal zur Ausführung. Wir hoffen jedoch, dass wir den Job abbrechen und antworten, wenn der Kanal ausgeblendet ist: [Der Dienst ist ausgelastet, bitte versuchen Sie es später erneut. ] Sie können select verwenden, um diese Anforderung zu erfüllen.
ch := make (chan int, 1) 
ch <- 1 
select { 
case ch <- 2: 
default: 
 fmt.Println("channel is full !") 
}
Nach dem Login kopieren

此外,利用default特性,我们可以使用select语句将chan清空,如下:


flag := false 
for { 
 select { 
 case <-pssScanResponseChan: 
 continue 
 default: 
 flag = true 
 } 
 if true == flag { 
 break 
 } 
}
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie kann ich Dateien mit Golang sicher lesen und schreiben? Wie kann ich Dateien mit Golang sicher lesen und schreiben? Jun 06, 2024 pm 05:14 PM

Das sichere Lesen und Schreiben von Dateien in Go ist von entscheidender Bedeutung. Zu den Richtlinien gehören: Überprüfen von Dateiberechtigungen, Schließen von Dateien mithilfe von Verzögerungen, Validieren von Dateipfaden, Verwenden von Kontext-Timeouts. Das Befolgen dieser Richtlinien gewährleistet die Sicherheit Ihrer Daten und die Robustheit Ihrer Anwendungen.

Erklären Sie den Match -Expression (Php 8) und wie er sich vom Schalter unterscheidet. Erklären Sie den Match -Expression (Php 8) und wie er sich vom Schalter unterscheidet. Apr 06, 2025 am 12:03 AM

In PHP8 sind Übereinstimmungsausdrücke eine neue Kontrollstruktur, die unterschiedliche Ergebnisse basierend auf dem Wert des Expression zurückgibt. 1) Es ähnelt einer Switch -Anweisung, gibt jedoch einen Wert anstelle eines Ausführungsanweisungsblocks zurück. 2) Der Match -Ausdruck wird streng verglichen (===), was die Sicherheit verbessert. 3) Es vermeidet mögliche Auslassungen in Switch -Anweisungen und verbessert die Einfachheit und Lesbarkeit des Codes.

Ist es vielversprechender, Java oder Golang von Front-End zu Back-End-Entwicklung zu verwandeln? Ist es vielversprechender, Java oder Golang von Front-End zu Back-End-Entwicklung zu verwandeln? Apr 02, 2025 am 09:12 AM

Backend Learning Path: Die Erkundungsreise von Front-End zu Back-End als Back-End-Anfänger, der sich von der Front-End-Entwicklung verwandelt, Sie haben bereits die Grundlage von Nodejs, ...

Wie fusioniere ich Arrayelemente mit derselben ID mit JavaScript in ein Objekt? Wie fusioniere ich Arrayelemente mit derselben ID mit JavaScript in ein Objekt? Apr 04, 2025 pm 05:09 PM

Wie fusioniere ich Array -Elemente mit derselben ID in ein Objekt in JavaScript? Bei der Verarbeitung von Daten begegnen wir häufig die Notwendigkeit, dieselbe ID zu haben ...

Wie verwende ich eine vordefinierte Zeitzone mit Golang? Wie verwende ich eine vordefinierte Zeitzone mit Golang? Jun 06, 2024 pm 01:02 PM

Die Verwendung vordefinierter Zeitzonen in Go umfasst die folgenden Schritte: Importieren Sie das Paket „time“. Laden Sie eine bestimmte Zeitzone über die LoadLocation-Funktion. Verwenden Sie die geladene Zeitzone für Vorgänge wie das Erstellen von Zeitobjekten, das Analysieren von Zeitzeichenfolgen und das Durchführen von Datums- und Uhrzeitkonvertierungen. Vergleichen Sie Daten mit unterschiedlichen Zeitzonen, um die Anwendung der vordefinierten Zeitzonenfunktion zu veranschaulichen.

Vermeiden Sie in C -Switch -Anweisungen standardmäßige Fehler Vermeiden Sie in C -Switch -Anweisungen standardmäßige Fehler Apr 03, 2025 pm 03:45 PM

Eine Strategie zur Vermeidung von Fehlern, die in C -Switch -Anweisungen standardmäßig verursacht wurden: Verwenden Sie die Umgebungen anstelle von Konstanten, wodurch der Wert der Fallerklärung auf ein gültiges Mitglied des Enum beschränkt wird. Verwenden Sie in der letzten Fallanweisung Falsch, um das Programm weiterhin den folgenden Code auszuführen. Fügen Sie für Switch -Anweisungen ohne Falle immer eine Standardanweisung für die Fehlerbehandlung hinzu oder geben Sie das Standardverhalten an.

Best Practices für C -Sprache Standardeinstellung Best Practices für C -Sprache Standardeinstellung Apr 03, 2025 pm 03:48 PM

Die Best Practices von Standard in der C -Sprache: Platzieren Sie sie am Ende der Switch -Anweisung als Standardverarbeitung für unerreichte Werte; Es wird verwendet, um unbekannte oder ungültige Werte zu verarbeiten, um die Programm Robustheit zu verbessern. Vermeiden Sie die Duplikation mit Fallzweigen, um die zuversichtliche Aufrechterhaltung zu erhalten. Kommentieren Sie deutlich zum Zweck der Standardzweig, um die Lesbarkeit zu verbessern. Vermeiden Sie es, mehrere Standardeinstellungen in einem Fall zu verwenden, um Klarheit aufrechtzuerhalten. Halten Sie den Standardzweig präzise und vermeiden Sie komplexe Operationen. Erwägen Sie, Aufzählungswerte als Fallbedingungen zu verwenden, um die Wartbarkeit zu verbessern. Verwenden Sie in großen Switch -Anweisungen mehrere Standardzweige, um unterschiedliche Situationen zu verarbeiten.

Golangs Zweck: Aufbau effizienter und skalierbarer Systeme Golangs Zweck: Aufbau effizienter und skalierbarer Systeme Apr 09, 2025 pm 05:17 PM

Go Language funktioniert gut beim Aufbau effizienter und skalierbarer Systeme. Zu den Vorteilen gehören: 1. hohe Leistung: Kompiliert in den Maschinencode, schnelle Laufgeschwindigkeit; 2. gleichzeitige Programmierung: Vereinfachen Sie Multitasking durch Goroutinen und Kanäle; 3. Einfachheit: präzise Syntax, Reduzierung der Lern- und Wartungskosten; 4. plattform: Unterstützt die plattformübergreifende Kompilierung, einfache Bereitstellung.

See all articles