English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在Go语言中,defer语句会延迟Fonction或方法或匿名方法的执行,直到附近的函数返回为止。换句话说,延迟函数或方法调用参数会立即求值,但是它们会执行到附近的函数返回为止。您可以使用defer关键字创建延迟的方法,函数或匿名函数。
语法:
// Fonction defer func func_name(parameter_list Type) return_type{ // Code } // 方法 defer func (receiver Type) method_name(parameter_list){ // Code } defer func (paramètre_liste)(type_de_retour){ // Code }()
Remarque :
En langage Go, plusieurs instructions defer peuvent être autorisées dans le même programme et elles s'exécutent en ordre LIFO (last in, first out), comme dans l'exemple2comme montré.
Dans l'instruction defer, les paramètres sont évalués au moment de l'exécution de l'instruction defer (et non au moment de leur appel).
Les instructions defer sont généralement utilisées pour s'assurer que les fichiers sont fermés après la fin du traitement du fichier, les canaux sont fermés ou pour capturer des situations d'urgence dans le programme.
Permettons de discuter de ce concept à l'aide d'un exemple :
Exemple1:
package main import "fmt" // Fonction func mul(a1, a2 int) int { res := a1 * a2 fmt.Println("Résultat : ", res) return 0 } func show() { fmt.Println("Bonjour!, fr.oldtoolbag.com Tutorial de base du langage Go") } func main() { //Appel de la fonction mul() //Voici le comportement de la fonction mul() //Comme une fonction normale mul(23, 45) //Appel de la fonction mul() //Utiliser la clé de mots defer //Voici la fonction mul() //Est une fonction différée defer mul(23, 56) //Appel de la fonction show() show() }
Sortie :
Résultat: 1035 Bonjour!, fr.oldtoolbag.com Tutorial de base du langage Go Résultat: 1288
Explication d'utilisation :Dans l'exemple ci-dessus, nous avons deux fonctions nomméesmul()etshow()La fonction dans la fonction. Parmishow()Les fonctions diffèrent généralementmain()Fonction appelée dans une fonction, en appelant de deux manières différentesmul()Fonction :
Tout d'abord, nous appelons la fonction comme une fonction normalemulFonction, c'est-à-dire mul(23,45) et s'exécute lors de l'appel de la fonction (Sortie : Résultat :1035)。
Ensuite, nous utilisons la clé de mots defer pourmul() 2356“),lorsque toutes les méthodes autour retournent1288)。
Exemple2:
package main import "fmt" // Fonction func add(a1, a2 int) int { res := a1 + a2 fmt.Println("Résultat : ", res) return 0 } func main() { fmt.Println("Début") //Plusieurs instructions différées //Exécute en ordre LIFO defer fmt.Println("Fin") defer add(34, 56) defer add(10, 10) }
Sortie :
Début Résultat: 20 Résultat: 90 Fin