Heim > Backend-Entwicklung > Golang > Warum zeigt meine Aufschubabrechnung nicht den erwarteten Ticketpreis in Go an?

Warum zeigt meine Aufschubabrechnung nicht den erwarteten Ticketpreis in Go an?

Susan Sarandon
Freigeben: 2024-10-30 18:30:18
Original
399 Leute haben es durchsucht

Why Does My Defer Statement Not Produce the Expected Ticket Price in Go?

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

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

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!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage