Die `goto`-Anweisung
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 4 von 68.
Die goto-Anweisung in Go ermöglicht es Ihnen, die Steuerung direkt an eine markierte Anweisung innerhalb derselben Funktion zu übertragen. Obwohl Go diese Funktion enthält, wird sie in der modernen Go-Programmierung selten verwendet, da klarere Kontrollstrukturen wie Schleifen und if-Anweisungen bevorzugt werden.
Um goto zu verwenden, definieren Sie zuerst ein Label, indem Sie einen Bezeichner gefolgt von einem Doppelpunkt schreiben. Dann können Sie zu diesem Label springen, indem Sie goto gefolgt vom Labelnamen verwenden.
func main() {
i := 0
start:
fmt.Println("Count:", i)
i++
if i < 3 {
goto start
}
fmt.Println("Done!")
}In diesem Beispiel springt das Programm zurück zum start-Label, bis die Bedingung nicht mehr erfüllt ist. Diese Logik wäre jedoch mit einer for-Schleife viel klarer. Die goto-Anweisung kann Code schwerer lesbar und wartbar machen, weshalb sie im Allgemeinen zugunsten eines strukturierten Kontrollflusses abgelehnt wird.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Aufgabe
EinfachIn dieser Herausforderung üben Sie die Verwendung der goto-Anweisung, um einen einfachen Wiederholungsmechanismus (Retry-Mechanismus) zu erstellen. Sie bauen ein Verbindungssystem auf, das versucht, eine Verbindung herzustellen, und es eine bestimmte Anzahl von Malen erneut versucht, wenn dies fehlschlägt.
Sie erhalten zwei Eingaben:
- Einen String, der die maximale Anzahl der Wiederholungsversuche darstellt (z. B.
"3") - Einen String, der die Nummer des Versuchs darstellt, der erfolgreich sein wird (z. B.
"2")
Ihre Aufgabe ist es:
- Die maximale Anzahl der Wiederholungsversuche aus der ersten Eingabe zu parsen
- Die Nummer des erfolgreichen Versuchs aus der zweiten Eingabe zu parsen
- Eine
goto-Anweisung mit einem Label zu verwenden, um die Wiederholungslogik zu implementieren - Mit Versuchsnummer 1 zu beginnen und nach jedem fehlgeschlagenen Versuch zu inkrementieren
- Für jeden fehlgeschlagenen Versuch
"Attempt [attempt_number] failed"auszugeben - Wenn die Versuchsnummer mit der Nummer des erfolgreichen Versuchs übereinstimmt,
"Attempt [attempt_number] succeeded"auszugeben und das Programm zu beenden - Wenn Sie die maximale Anzahl der Wiederholungsversuche ohne Erfolg überschreiten,
"All attempts failed"auszugeben und das Programm zu beenden
Verwenden Sie die goto-Anweisung, um zum Wiederholungs-Label zurückzuspringen, wenn ein Versuch fehlschlägt und Sie die maximale Anzahl der Versuche noch nicht überschritten haben. Die Versuchsnummern sollten bei 1 beginnen.
Spickzettel
Die goto-Anweisung überträgt die Steuerung direkt an eine markierte Anweisung innerhalb derselben Funktion. Definieren Sie ein Label mit einem Bezeichner gefolgt von einem Doppelpunkt und springen Sie dann mit goto dorthin:
func main() {
i := 0
start:
fmt.Println("Count:", i)
i++
if i < 3 {
goto start
}
fmt.Println("Done!")
}Obwohl goto in Go verfügbar ist, wird es in der modernen Go-Programmierung selten verwendet, da strukturierter Kontrollfluss wie Schleifen und if-Anweisungen klarer und wartungsfreundlicher sind.
Probier es selbst
package main
import (
"fmt"
"strconv"
)
func main() {
// Eingabe lesen
var maxRetriesStr string
var successAttemptStr string
fmt.Scanln(&maxRetriesStr)
fmt.Scanln(&successAttemptStr)
// Eingaben in Ganzzahlen umwandeln
maxRetries, _ := strconv.Atoi(maxRetriesStr)
successAttempt, _ := strconv.Atoi(successAttemptStr)
// Versuchszähler initialisieren
attempt := 1
// TODO: Schreiben Sie Ihren Code unten
// Verwenden Sie die goto-Anweisung mit einem Label, um die Retry-Logik zu implementieren
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittener Kontrollfluss
Switch mit `fallthrough`Abbrechen von verschachtelten SchleifenFortsetzen einer bestimmten SchleifeDie `goto`-AnweisungZusammenfassung – Fortgeschrittene Schleifensteuerung4Projekt: Einfache Aufgabenliste
Projekt-SetupEine Aufgabe hinzufügen2Structs und Methoden
Methoden für Structs definierenValue ReceiverPointer ReceiverReceiver auswählenMethoden vs. FunktionenZusammenfassung – Struct-Verhalten5Maps im Detail
Maps von StructsPointer als Map-WertePrüfen auf Nil-MapsMaps vergleichenZusammenfassung – Wortfrequenz-Zähler8Projekt: Einfache Bestandsverwaltung
ProjektübersichtLagerbestand prüfen11Abschlussherausforderungen
Einfache KontaktlisteEinfacher Zahlen-ValidatorSammler für eindeutige Elemente3Interfaces (Die Grundlagen)
Was ist ein Interface?Ein Interface definierenEin Interface implementierenInterface-Typen verwendenLeeres InterfaceType AssertionsType SwitchZusammenfassung – Formen und Verhalten