English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang 基础教程

Golang 控制语句

Golang 函数 & 方法

Golang 结构体

Golang 切片 & 数组

Golang 字符串(String)

Golang 指针

Golang 接口

Golang 并发

Golang 异常(Error)

Golang 其他杂项

Mot-clé Defer Go

在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