Heim > Artikel > Backend-Entwicklung > Warum zeigt meine Aufschubabrechnung nicht den erwarteten Ticketpreis in Go an?
So funktioniert das Schlüsselwort „defer“ in Go
In Go können Sie mit dem Schlüsselwort „defer“ die Ausführung einer Funktion oder Anweisung bis zur Umgebung verzögern Funktion kehrt zurück. Der Wert und die Parameter der verzögerten Funktion werden jedoch sofort ausgewertet und zum Zeitpunkt der defer-Anweisung an den Funktionsaufruf gebunden.
Verstehen der Reihenfolge der verzögerten Auswertung
Beispielsweise der folgende Code:
defer fmt.Println("Your age is:", getAge(age))
verzögert die Ausführung der Funktion fmt.Println und bindet den Wert von age zum Zeitpunkt der defer-Anweisung. Der eigentliche fmt.Println-Funktionsaufruf wird jedoch in umgekehrter Reihenfolge ausgeführt, kurz bevor die umgebende Funktion zurückkehrt.
Anwendung in einer Ticketpreisberechnung
In Ihrem Fall möchten Sie den Ticketpreis basierend auf dem Alter des Benutzers berechnen:
defer fmt.Println("Your ticket price is:", printTicket(age, ticketPrice))
Hier bindet die Defer-Anweisung den Wert von Alter und Ticketpreis zum Zeitpunkt der Defer-Anweisung. Wenn die Hauptfunktion zurückkehrt, wird printTicket mit den gebundenen Werten „age“ und „ticketPrice“ aufgerufen. Da jedoch nur die if-Anweisung für das Alter <= 13 ausgeführt wird, werden nur 9,99 ausgegeben.
Problem lösen
Um das Problem zu beheben, stellen Sie sicher, dass Alle notwendigen Bedingungen in printTicket werden ausgewertet, bevor die Funktion zurückgestellt wird. Hier ist eine modifizierte Version:
defer fmt.Println(*age) if *age <= 13 { ticketPrice = 9.99 } else if *age > 13 && *age < 65 { ticketPrice = 19.99 } else if *age >= 65 { ticketPrice = 12.99 } defer fmt.Println(ticketPrice)Jetzt werden sowohl fmt.Println(*age) als auch fmt.Println(ticketPrice) zurückgestellt und in umgekehrter Reihenfolge ausgeführt, wobei das richtige Alter und der richtige Ticketpreis angezeigt werden.
Das obige ist der detaillierte Inhalt vonWarum zeigt meine Aufschubabrechnung nicht den erwarteten Ticketpreis in Go an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!