Verstehen der Funktionalität des Defer-Schlüsselworts von Go
Bei der Arbeit mit Go ist es entscheidend, das Verhalten des Defer-Schlüsselworts zu verstehen. Mit diesem Schlüsselwort können Entwickler die Ausführung einer Funktion verschieben, bis die umgebende Funktion zurückkehrt. Es ist jedoch wichtig zu beachten, dass der Wert und die Parameter der Funktion ausgewertet werden, wenn die Defer-Anweisung ausgeführt wird.
Beispiel: Auswerten der Defer-Reihenfolge
Um dies zu veranschaulichen, betrachten Sie Folgendes Code:
<code class="go">package main import "fmt" func main() { defer having()(fun("with Go.")) fmt.Print("some ") // evaluation order: 3 } func having() func(string) { fmt.Print("Go ") // evaluation order: 1 return funWithGo } func fun(msg string) string { fmt.Print("have ") // evaluation order: 2 return msg } func funWithGo(msg string) { fmt.Println("fun", msg) // evaluation order: 4 }</code>
In diesem Beispiel wird der Code in der folgenden Reihenfolge ausgeführt:
Anwenden des Defer-Prinzips
Um das in der ursprünglichen Abfrage erwähnte Problem zu beheben, können wir das Schlüsselwort „defer“ verwenden, um den Ticketpreis korrekt auszudrucken auf das eingegebene Alter. Unten ist eine modifizierte Version des Codes:
<code class="go">package main import "fmt" func main() { age := 999 defer fmt.Println("Your age is:", getAge(&age)) // defer printing the age defer fmt.Println("Your ticket price is:", getTicketPrice(age)) // defer printing the ticket price } func getTicketPrice(age int) float64 { // Calculate ticket price based on age // logic can be customized here fmt.Println("...order is 2...") switch { case age <= 13: return 9.99 case age > 13 && age < 65: return 19.99 default: return 12.99 } } func getAge(age *int) int { fmt.Println("...order is 1...") fmt.Print("Enter age=") fmt.Scanln(age) return *age }</code>
In diesem modifizierten Code nutzen wir das Schlüsselwort defer korrekt, um sicherzustellen, dass das Alter und der Ticketpreis gedruckt werden, nachdem die jeweiligen Funktionen ausgeführt wurden, wodurch das ursprüngliche Problem behoben wird .
Das obige ist der detaillierte Inhalt vonWie funktioniert das Defer-Schlüsselwort von Go in der Funktionsausführungsreihenfolge?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!