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.
Aufgabe
EinfachIn dieser Herausforderung übst du die Verwendung der goto-Anweisung, um einen einfachen Wiederholungsmechanismus zu erstellen. Du entwickelst ein Verbindungssystem, das versucht, eine Verbindung herzustellen, und eine bestimmte Anzahl von Wiederholungsversuchen unternimmt, wenn dies fehlschlägt.
Du erhältst zwei Eingaben:
- Eine Zeichenfolge, die die maximale Anzahl von Wiederholungsversuchen darstellt (z. B.
"3") - Eine Zeichenfolge, die die Nummer des erfolgreichen Versuchs darstellt (z. B.
"2")
Deine Aufgabe ist es:
- Die maximalen Wiederholungsversuche aus der ersten Eingabe zu analysieren
- Die Nummer des erfolgreichen Versuchs aus der zweiten Eingabe zu analysieren
- Eine
goto-Anweisung mit einem Label zu verwenden, um die Wiederholungslogik zu implementieren - Mit der Versuchsnummer 1 zu beginnen und sie nach jedem fehlgeschlagenen Versuch zu erhöhen
- 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 du die maximale Anzahl von Wiederholungsversuchen ohne Erfolg überschreitest,
"All attempts failed"auszugeben und das Programm zu beenden
Verwende die goto-Anweisung, um bei einem fehlgeschlagenen Versuch zum Wiederholungs-Label zurückzuspringen, sofern du die maximale Anzahl der Versuche noch nicht überschritten hast. Die Versuchsnummern sollten bei 1 beginnen.
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Übe selbstständig: Online-Go-Compiler