Go語言的return 與 defer 執行順序

所有博客都會舉兩個例子, 聲明返回值變量名稱的 與 不聲明返回值變量名稱的.

 

我覺得一個博主說的不錯.

爲了弄清上述兩種情況的區別,我們首先要理解return 返回值的運行機制:
return 並非原子操作,分爲賦值,和返回值兩步操作
eg1(不聲明返回值變量名稱的.) : 實際上return 執行了兩步操作,因爲返回值沒有命名,所以
return 默認指定了一個返回值(假設爲s),首先將i賦值給s,後續
的操作因爲是針對i,進行的,所以不會影響s, 此後因爲s不會更新,所以
return s 不會改變
相當於:
var i int
s := i
return s
eg2 (不聲明返回值變量名稱的.): 同上,s 就相當於 命名的變量i, 因爲所有的操作都是基於
命名變量i(s),返回值也是i, 所以每一次defer操作,都會更新
返回值i

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章