第 13 天要介紹 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 的介紹就到此結束,有任何問題都歡迎與我告知 :)
本篇文章同步發佈於我的部落格