Menu
Coddy logo textTech

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.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

challenge icon

Aufgabe

Einfach

In 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:

  1. Die maximale Anzahl der Wiederholungsversuche aus der ersten Eingabe zu parsen
  2. Die Nummer des erfolgreichen Versuchs aus der zweiten Eingabe zu parsen
  3. Eine goto-Anweisung mit einem Label zu verwenden, um die Wiederholungslogik zu implementieren
  4. Mit Versuchsnummer 1 zu beginnen und nach jedem fehlgeschlagenen Versuch zu inkrementieren
  5. Für jeden fehlgeschlagenen Versuch "Attempt [attempt_number] failed" auszugeben
  6. Wenn die Versuchsnummer mit der Nummer des erfolgreichen Versuchs übereinstimmt, "Attempt [attempt_number] succeeded" auszugeben und das Programm zu beenden
  7. 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
    
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf