iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
自我挑戰組

30 天學 Golang?Go 啦哪次不 Go系列 第 13

Day13# defer

第 13 天要介紹 defer 是什麼,那麼我們就進入正題吧 ─=≡Σ(((っ゚∀゚)っ

defer

defer 是 Go 內建的函式,執行的時間點會在 function 要回傳前被執行。

package main

import "fmt"

func main() {
	defer fmt.Println("World")

	fmt.Println("Hello")
}

// => Hello
//    World

雖然 defer 是最後才執行,但是他接收到參數的時間點還是跟程式碼執行的順序有關:

package main

import "fmt"

func main() {
	cat := "BuiBui"
	defer fmt.Println(cat)

	cat = "MeiMei"
	fmt.Println("Which cat?")
}

// => Which cat?
//    BuiBui

最後得到的 cat 是 BuiBui,由此可以確定 defer 會先接完參數,再等到 function 結束前才執行。

最後 defer 的一個特點是 last-in-first-out,一般執行方法都會先呼叫的先執行,但在 defer 會是最後呼叫的先執行:

package main

import "fmt"

func main() {
	cat := "BuiBui"
	defer fmt.Println(cat)

	cat = "MeiMei"
	defer fmt.Println(cat)
}
// => MeiMei
//    BuiBui

如果用迴圈執行看看:

package main

import "fmt"

func main() {
	fmt.Println("Go!")

	for i := 0; i < 5; i++ {
		defer fmt.Println(i)
	}

	fmt.Println("Done!")
}
// => Go!
//    Done!
//    4
//    3
//    2
//    1
//    0

結尾

defer 的介紹就到此結束,有任何問題都歡迎與我告知 :)
本篇文章同步發佈於我的部落格


上一篇
Day12# interface
下一篇
Day14# Thread
系列文
30 天學 Golang?Go 啦哪次不 Go20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言