1. 程式人生 > GO語言入門 >23 Go 語言函式中的 defer

23 Go 語言函式中的 defer

Tips:關於 defer 的程序鎖的釋放在 Go 語言的多執行緒中會有介紹。

1. defer 的逆序執行

defer 會在函式即將結束的時候執行,而且是按照 defer 的順序逆序執行。

程式碼示例

package main

import "fmt"

func main() {
    defer fmt.Println("第一個defer的語句")
    defer fmt.Println("第二個defer的語句")
    defer fmt.Println("第三個defer的語句")
    fmt.Println("Hello Codey!")
}
  • 第 6 行:第一個 defer
    的語句,最後一個執行;
  • 第 7 行:第二個 defer 的語句,第二個執行;
  • 第 8 行:第一個 defer 的語句,最後一個執行。

執行結果

圖片描述

2. defer 中的變數

defer 關鍵字之後若有變數,則 defer 記錄的是在 defer 時的變數值,而不是最後函式結束時的變數值。

程式碼示例

package main

import "fmt"

func main() {
    a := 10
    defer fmt.Println("defer時a的值為", a)
    a = 100
    fmt.Println("print時a的值為", a)
}
  • 第 7 行:此時變數 a 的值為 10,所以 defer
    輸出時a的值為10;
  • 第 8 行:此時變數 a 的值為 100,所以輸出時 a 的值為100。

執行結果

圖片描述

3. 小結

本文主要介紹了 Go 語言中 defer 的使用,需要注意以下幾點:

  • defer先聲明後執行的語句模式;
  • defer 會在函式即將結束的時候統一執行;
  • defer 中的變數值不會defer 之後的語句改變。