Comprendre la fonctionnalité du mot-clé Defer de Go
Lorsque vous travaillez avec Go, il est crucial de comprendre le comportement du mot-clé Defer. Ce mot-clé permet aux développeurs de différer l'exécution d'une fonction jusqu'au retour de la fonction environnante. Cependant, il est important de noter que la valeur et les paramètres de la fonction sont évalués lors de l'exécution de l'instruction defer.
Exemple : Évaluation de l'ordre de report
Pour illustrer cela, considérez ce qui suit 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
}
Dans cet exemple, le code est exécuté dans l'ordre suivant :
Application du principe de report
Pour résoudre le problème mentionné dans la requête d'origine, nous pouvons utiliser le mot-clé defer pour imprimer correctement le prix du billet en fonction sur l'âge saisi. Vous trouverez ci-dessous une version modifiée du code :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 Dans ce code modifié, nous exploitons correctement le mot-clé defer pour garantir que l'âge et le prix du billet sont imprimés après l'exécution des fonctions respectives, résolvant ainsi le problème initial.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3