go 學習筆記之咬文嚼字帶你弄清楚什麼是 defer延遲函式

snowdreams1006發表於2019-11-19

https://mp.weixin.qq.com/s/t5tmqsjZ4y4Z_n6u4c9bMw

通過本文,我們知道了延遲函式的執行時機以及一些細節,關鍵是理解 Each time a "defer" statement executes, the function value and parameters to the call are evaluated as usual and saved anew but the actual function is not invoked. 這句話,絕對是重中之重!

簡而言之,延遲函式在宣告時會收集相關引數賦值拷貝一份入棧,時機合適時再從入棧環境中尋找相關環境引數,如果找不到就擴大範圍尋找外層函式是否包含所需變數,執行過程也就是延遲函式的出棧.

有一個消防員專門負責保衛商場的安全,每天商場進進出出很多人流,總有一些重要人物也會來到商場購物,突然有一天,發生了火災,正在大家驚慌失措中...

這個消防員到底幹了什麼才能保證重要人物安全的同時也能讓他們不遭受財產損失?

https://tva1.sinaimg.cn/large/006y8mN6ly1g93hp4mohcj30aa08wq30.jpg
go-error-defer-panic.png

請補充你的答案,感謝你的閱讀與關注,下一節再見~

閱讀延伸以及參考文件

  • Defer_statements[3]
  • Built-in_functions[4]
  • Go 語言規格說明書 之 內建函式(Built-in functions)[5]
  • go 語言快速入門:內建函式(6)[6]
  • 你知道 defer 的坑嗎?[7]
  • golang 語言 defer 特性詳解.md[8]
  • Golang 之輕鬆化解 defer 的溫柔陷阱[9]

參考資料

[1]

go 學習筆記之解讀什麼是defer延遲函式: https://mp.weixin.qq.com/s/XttOuCEk7kgySKLOCqVMRQ

[2]

defer關鍵字: https://tiancaiamao.gitbooks.io/go-internals/content/zh/03.4.html

[3]

Defer_statements: https://golang.google.cn/ref/spec#Defer_statements

[4]

Built-in_functions: https://golang.google.cn/ref/spec#Built-in_functions

[5]

Go語言規格說明書 之 內建函式(Built-in functions): https://www.cnblogs.com/luo630/p/9669966.html

[6]

go語言快速入門:內建函式(6): https://blog.csdn.net/liumiaocn/article/details/54804074

[7]

你知道defer的坑嗎?: https://www.jianshu.com/p/9a7364762714

[8]

golang語言defer特性詳解.md: https://www.jianshu.com/p/57acdbc8b30a

[9]

Golang之輕鬆化解defer的溫柔陷阱: https://segmentfault.com/a/1190000018169295

相關文章