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: Defer Order auswerten
Bedenken Sie zur Veranschaulichung Folgendes Code:
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
}
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 finden Sie eine modifizierte Version des Codes:
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 && age In diesem geänderten 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.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3