iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 18
1
自我挑戰組

Go從新學系列 第 18

[DAY 18]GO 的 Defer

  • 分享至 

  • xImage
  •  

Defer ,從字面上看就是延遲的意思

顧名思義它有著延遲程式執行的功能

  • Defer 功能

package main

import "fmt"

func first(){
	fmt.Println("first")
}

func second(){
	fmt.Println("second")
}

func main() {
	defer first()
	second()
}

執行結果

second
first

如上例所示

原本應該先執行的 first 函式

因為我們用了 defer 去延遲它

所以系統會先執行 second 函式

  • 多個 Defer

package main

import "fmt"

func first(){
	fmt.Println("first")
}

func second(){
	fmt.Println("second")
}

func main() {
	defer first()
	defer second()
	fmt.Println("third")
}

執行結果

third
second
first

若今天有多個同時執行

系統一樣會優先執行未被 defer 的函式

接著會依 defer 的相反順序執行

  • Defer 主要功用

那 defer 通常會用在哪裡呢

因為 defer 的特性,使得被 defer 的函式會在 return 前最後執行

所以通常都用來釋放資源或是程式最後檢查關閉的動作

有點類似離開房間最後一件事就是鎖門,使用 defer 一定會讓程式記得要 close 這個行為

f, _ := os.Open(filename)
defer f.Close()

參考來源:Go 程式設計導論
openhome.cc

https://ithelp.ithome.com.tw/upload/images/20191004/20121032BxaPHaljTy.png


上一篇
[DAY 17]GO 的 函式(三)
下一篇
[DAY 19]GO 的 Panic
系列文
Go從新學26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言