Déférer les planifications d'une fonction à exécuter avant le retour de la fonction environnante, en exécutant dans l'ordre en dernier-in, première sortie (LIFO); 2. Les arguments aux fonctions différés sont évalués immédiatement, mais la fonction s'exécute plus tard, bien que les fermetures puissent capturer des variables par référence pour une évaluation retardée; 3. Les cas d'utilisation courants incluent la fermeture des fichiers, le déverrouillage des mutex et le nettoyage des ressources temporaires, garantissant que ces actions se produisent, quelle que soit la fa?on dont la fonction sort; 4. Les fonctions différées peuvent modifier les valeurs de retour nommées via les fermetures et exécuter même pendant les paniques, ce qui les rend idéales pour une utilisation avec Recover pour gérer les erreurs gracieusement; En résumé, Defer fournit un mécanisme fiable pour le nettoyage et la gestion des ressources dans GO, garantissant que les actions finales critiques sont effectuées.
Dans Go, defer
est un mot-clé qui vous permet de planifier un appel de fonction pour s'exécuter juste avant le retour de la fonction environnante. Il est couramment utilisé pour le nettoyage des actions telles que la fermeture des fichiers, le déverrouillage des mutexes ou la sortie de la journalisation d'une fonction.

1. Comportement de base du defer
Lorsque vous utilisez defer
, l'appel de fonction est poussé sur une pile et exécuté dans le dernier ordre de premier ordre (LIFO) lorsque la fonction quitte - qu'elle sache normalement ou en raison d'une panique.
func main () { différer fmt.println ("premier différé") différer fmt.println ("deuxième différé") fmt.println ("Inside Main") }
Sortir:

Intérieur principal Seconde différée Premier différé
AVIS: Le deuxième defer
fonctionne en premier parce que les appels différés sont empilés.
2. Quand la fonction différée est-elle évaluée?
Un détail important: les arguments à la fonction différée sont évalués immédiatement lorsqu'ils sont defer
, mais la fonction elle-même s'exécute plus tard .

func main () { i: = 10 différer fmt.println ("valeur de i:", i) // imprime 10, pas 20 i = 20 }
Sortir:
Valeur de i: 10
Même si i
change plus tard, la valeur a été capturée au moment de l'exécution defer
.
Vous pouvez utiliser une fermeture pour retarder l'évaluation:
func main () { i: = 10 différer func () { fmt.println ("valeur de i:", i) // imprime 20 } () i = 20 }
Maintenant, il imprime 20
car la fermeture capture la variable par référence.
3. Cas d'utilisation courantes
defer
brille dans la gestion des ressources:
? Cl?ture d'un fichier
fichier, err: = os.open ("data.txt") Si err! = Nil { log.fatal (err) } remettre file.close () // garanti l'exécution avant les sorties de la fonction // ... utilisez le fichier
? Déverrouiller un mutex
mu.lock () différer mu.unlock () // Section critique // Même si la panique se produit, le déverrouillage sera appelé
? Nettoyer les ressources temporaires
os.mkdirall ("/ tmp / work", 0755) Déférer os.removeall ("/ tmp / work") // nettoyage à la fin
4. Interaction avec les valeurs de retour nommées et panic
/ recover
Si une fonction a nommé des valeurs de retour , une fonction différée peut les modifier à l'aide d'une fermeture.
func bizarre () (résultat int) { différer func () { résultat = 10 } () Retour 5 // Retour 15 }
Aussi, defer
des courses même s'il y a une panic
:
func panicky () { différer fmt.println ("cela fonctionne même après la panique") panique ("Oh non!") }
Et cela rend defer
parfait pour recover
:
func safedivide (a, b int) (résultat int, ok bool) { différer func () { Si r: = récupérer (); r! = Nil { résultat = 0 ok = faux } } () résultat = a / b ok = vrai retour }
Résumé
-
defer
les planifications d'un appel de fonction à exécuter lorsque la fonction quitte. - Les arguments sont évalués immédiatement; La fonction s'exécute plus tard.
- Plusieurs
defer
exécutés dans l'ordre Lifo. - Utile pour le nettoyage: fichiers, verrous, données temporaires.
- Fonctionne avec
panic
etrecover
. - Peut modifier les valeurs de retour nommées via les fermetures.
Ce n'est pas magique - juste un moyen propre et fiable de s'assurer que le code de nettoyage s'exécute. Utilisez-le souvent lors de la gestion des ressources.
Fondamentalement, si vous l'ouvrez, verrouillez-le ou créez-le - defer
la fermeture, le déverrouillage ou le nettoyage.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Golang convient au développement rapide et aux scénarios simultanés, et C convient aux scénarios où des performances extrêmes et un contr?le de bas niveau sont nécessaires. 1) Golang améliore les performances grace à des mécanismes de collecte et de concurrence des ordures, et convient au développement de services Web à haute concurrence. 2) C réalise les performances ultimes grace à la gestion manuelle de la mémoire et à l'optimisation du compilateur, et convient au développement du système intégré.

Golang est meilleur que C en concurrence, tandis que C est meilleur que Golang en vitesse brute. 1) Golang obtient une concurrence efficace par le goroutine et le canal, ce qui convient à la gestion d'un grand nombre de taches simultanées. 2) C Grace à l'optimisation du compilateur et à la bibliothèque standard, il offre des performances élevées près du matériel, adaptées aux applications qui nécessitent une optimisation extrême.

Quelles bibliothèques de GO sont développées par de grandes entreprises ou des projets open source bien connus? Lors de la programmation en Go, les développeurs rencontrent souvent des besoins communs, ...

Golang est meilleur que Python en termes de performances et d'évolutivité. 1) Les caractéristiques de type compilation de Golang et le modèle de concurrence efficace le font bien fonctionner dans des scénarios de concurrence élevés. 2) Python, en tant que langue interprétée, s'exécute lentement, mais peut optimiser les performances via des outils tels que Cython.

GO Language fonctionne bien dans la construction de systèmes efficaces et évolutifs. Ses avantages incluent: 1. Haute performance: compilé en code machine, vitesse de course rapide; 2. Programmation simultanée: simplifier le multitache via les goroutines et les canaux; 3. Simplicité: syntaxe concise, réduction des co?ts d'apprentissage et de maintenance; 4. Plate-forme multipliée: prend en charge la compilation multiplateforme, déploiement facile.

Golang et Python ont chacun leurs propres avantages: Golang convient aux performances élevées et à la programmation simultanée, tandis que Python convient à la science des données et au développement Web. Golang est connu pour son modèle de concurrence et ses performances efficaces, tandis que Python est connu pour sa syntaxe concise et son écosystème de bibliothèque riche.

C est plus adapté aux scénarios où le contr?le direct des ressources matérielles et une optimisation élevée de performances sont nécessaires, tandis que Golang est plus adapté aux scénarios où un développement rapide et un traitement de concurrence élevé sont nécessaires. 1.C's Avantage est dans ses caractéristiques matérielles proches et à des capacités d'optimisation élevées, qui conviennent aux besoins de haute performance tels que le développement de jeux. 2. L'avantage de Golang réside dans sa syntaxe concise et son soutien à la concurrence naturelle, qui convient au développement élevé de services de concurrence.

GOIMIMPACTSDEVENCEMENTSPOSITIVEMENTS INSPECT, EFFICACTION ET APPLICATION.1) VITESSE: GOCOMPILESQUICKLYANDRUNSEFFIéMENT, IDEALFORLARGEPROROSTS.2) Efficacité: ITSCOMPEHENSIVESTANDARDLIBRARYREDUCEEXTERNEDENDENCES, EnhancingDevelovefficiency.3) Simplicité: Simplicité: Implicité de la manière
