Golang 菜鳥教程

Golang 控制語句

Golang 函數(shù) & 方法

Golang 結(jié)構(gòu)體

Golang 切片 & 數(shù)組

Golang 字符串(String)

Golang 指針

Golang 接口

Golang 并發(fā)

Golang 異常(Error)

Golang 其他雜項

Go Defer關(guān)鍵字

在Go語言中,defer語句會延遲函數(shù)或方法或匿名方法的執(zhí)行,直到附近的函數(shù)返回為止。換句話說,延遲函數(shù)或方法調(diào)用參數(shù)會立即求值,但是它們會執(zhí)行到附近的函數(shù)返回為止。您可以使用defer關(guān)鍵字創(chuàng)建延遲的方法,函數(shù)或匿名函數(shù)。

語法:

// 函數(shù)
defer func func_name(parameter_list Type) return_type{
    // Code
}

// 方法
defer func (receiver Type) method_name(parameter_list){
    // Code
}

defer func (parameter_list)(return_type){
    // code
}()

注意事項:

  • 在Go語言中,同一程序中允許多個defer語句,并且它們按LIFO(后進先出)順序執(zhí)行,如示例2所示。

  • 在defer語句中,將在執(zhí)行defer語句時(而不是在調(diào)用它們時)評估參數(shù)。

  • defer語句通常用于確保在完成文件處理后關(guān)閉文件,關(guān)閉通道或捕獲程序中的緊急情況。

讓我們借助示例來討論這個概念:

范例1:

package main

import "fmt"

// 函數(shù)
func mul(a1, a2 int) int {
    res := a1 * a2
    fmt.Println("Result: ", res)
    return 0
}

func show() {
    fmt.Println("Hello!, www.soo66.com Go語言菜鳥教程")
}

func main() {

    //調(diào)用mul()函數(shù)
    //這里mul函數(shù)的行為
    //像普通函數(shù)一樣
    mul(23, 45)

    //調(diào)用mul()函數(shù)
    //使用defer關(guān)鍵字
    //這里是mul()函數(shù)
    //是延遲函數(shù)
    defer mul(23, 56)
    //調(diào)用show()函數(shù)
    show()
}

輸出:

Result:  1035
Hello!, www.soo66.com Go語言菜鳥教程
Result:  1288

用法解釋:在上面的示例中,我們有兩個名為mul()show()函數(shù)的函數(shù)。其中show()函數(shù)通常在main()函數(shù)中調(diào)用,同時我們以兩種不同的方式調(diào)用mul()函數(shù):

  • 首先,我們像常規(guī)函數(shù)一樣調(diào)用mul函數(shù),即mul(23,45)并在函數(shù)調(diào)用時執(zhí)行(輸出:Result:1035)。

  • 其次,我們使用defer關(guān)鍵字將mul()函數(shù)稱為defer函數(shù),即defer mul( 23,56),當所有周圍的方法返回時,它將執(zhí)行(輸出:Result:1288)。

范例2:

package main 
  
import "fmt"
  
// 函數(shù)
func add(a1, a2 int) int { 
    res := a1 + a2 
    fmt.Println("Result: ", res) 
    return 0 
} 
  
func main() { 
  
    fmt.Println("Start") 
  
    //多個延遲語句
    //以LIFO順序執(zhí)行
    defer fmt.Println("End") 
    defer add(34, 56) 
    defer add(10, 10) 
}

輸出:

Start
Result:  20
Result:  90
End
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清