Golang Defer

Golang Defer
La fonction de différence dans GO vous permet de retarder l'exécution d'une fonction jusqu'à ce que l'autre fonction sort. Dans la plupart des cas, nous utilisons le mot-clé de report pour retarder l'exécution d'une fonction plus tard dans le programme de nettoyage. Un exemple serait de fermer un fichier, de fermer un canal ou de fermer un mutex. Ce n'est pas différent si vous connaissez enfin ou assurez-vous dans d'autres langages de programmation.

Laissez-nous utiliser ce guide pour apprendre à utiliser le mot-clé de différence dans Go.

Mot-clé de différence de Golang.

Pour ajouter un mécanisme de différence à une fonction, utilisez le mot-clé de différence suivi de la fonction ou du nom de la méthode. Un exemple de code est comme indiqué:

package principal
Importer "FMT"
func main ()
fmt.Println ("je cours en premier")
différer FMT.Println ("je cours en dernier")
fmt.Println ("je cours deuxième")

Dans l'exemple ci-dessus, nous utilisons le mot-clé de report en mots pour retarder l'exécution de la fonction sur la quatrième ligne. Cela signifie que cette fonction s'exécutera en dernier.

Un exemple de sortie est comme indiqué:

$ go run Defer.aller
Je cours en premier
Je cours deuxième
Je cours en dernier

Cela signifie que la méthode ne s'exécute qu'après que toutes les autres méthodes renvoient.

Gardez à l'esprit que la fonction ou la méthode appelée avec un mot-clé de différence fonctionnera tant que les autres méthodes / fonctions reviendront. Le retour peut être soit par une panique ou une exécution normale.

Considérez l'exemple ci-dessous où une méthode est appelée malgré une panique.

package principal
Importer "FMT"
func main ()
différer FMT.Println ("je cours")
panique ("panique!!!")
fmt.Println ("je ne cours pas")

Le code ci-dessus doit retourner:

$ go run Defer.aller
je cours
panique: panique!!!
Goroutine 1 [Running]:
principal.principal()
+0x73
Statut de sortie 2

Ordre d'exécution

Les arguments d'une fonction différée sont évalués immédiatement, bien que l'exécution soit retardée jusqu'à ce que la fonction environnante revienne.

Si vous avez plus d'un appel de fonction différé, Go les organise dans une liste et les exécute dans le dernier ordre de sortie (LIFO).

Nous pouvons illustrer cela en utilisant une boucle simple comme indiqué ci-dessous:

package principal
Importer "FMT"
func main ()
fmt.Println ("je commence")
pour i: = 1; je <= 5; i++
différer FMT.Println (i)

fmt.Println ("i seconde")

Nous pouvons voir l'ordre d'exécution dans la sortie:

Je commence
J'ai deuxièmement
5
4
3
2
1

Utilisez la fonction de différence pour renvoyer une valeur

Vous pouvez utiliser une fonction différée anonyme pour accéder et modifier les paramètres de retour de la fonction environnante.

Un exemple est comme indiqué:

func say () (str string)
différer func ()
str = "au revoir"
()
Retour "Bonjour!"

Dans cet exemple, la fonction renvoie la chaîne «au revoir» au lieu de «bonjour».

Différer une utilisation pratique - Fermer le fichier

Un cas d'utilisation réel du mot-clé de différence est de fermer un fichier. Prenez l'exemple ci-dessous:

fichier, err: = os.Ouvert ("Bonjour.SMS")
Si err != nil
enregistrer.Fatal (euh)

fichier de report.Fermer()
scanner: = bufio.NewsCanner (fichier)
scanner.Split (Bufio.Scanwords)
pour scanner.Analyse()
fmt.Println (scanner.Texte())

Si err: = scanner.Se tromper(); se tromper != nil
enregistrer.Fatal (euh)

Nous ouvrons le fichier à lire à l'aide de la méthode Open () dans l'exemple ci-dessus. Nous utilisons ensuite le mot-clé de différence pour retarder l'opération de fermeture une fois l'opération de lecture terminée.

Conclusion

Dans cet article, nous discutons du fonctionnement des mots clés à reporter et comment nous pouvons l'utiliser pour retarder l'exécution d'une fonction.

Merci d'avoir lu!!