2020-10-19:golang里defer為什么要逆序執行?順序執行不是更符合人的習慣嗎?#福大大架構師每日一題#
uj5u.com熱心網友回復:
defer一般用來釋放資源的,因果關系上后分配的資源可能會依賴前面的資源,如果先釋放被依賴的資源就會出現問題。所以倒過來執行不會破壞依賴關系.uj5u.com熱心網友回復:
因為它的結構是堆疊,用的FILO,所以會是逆序uj5u.com熱心網友回復:
defer陳述句是go語言提供的一種用于注冊延遲呼叫的機制,它可以讓函式在當前函式執行完畢后執行。它的實作是將defer 陳述句及引數壓入堆疊,所以是逆序執行。uj5u.com熱心網友回復:
后面定義的函式可能會依賴前面的資源,所以要先執行。如果前面先執行,釋放掉這個依賴,那后面的函式就不能找到它的依賴了。uj5u.com熱心網友回復:
順序執行就不需要defer了,直接順序執行到最右再執行defer的函式不就好了嗎?所以,defer就是怕有人順序執行時到最后忘了執行defer該做的處理,于是就把該做處理提到前面,用個defer來控制再最后才執行,這樣每層defer都滿足該層的defer控制(每層的最后調defer),于是最里層的defer就會先呼叫,然后再外層的defer呼叫,依次一層層向外,直到最外層的defer最后呼叫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/181188.html
標籤:Java相關
下一篇:怎么弄啊
