defer問題——面試Go必看
首先分享一段面試程式碼
func calc(index string, a, b int) int {
ret := a + b
fmt.Println(index, a, b, ret)
return ret
}
func main() {
a := 1
b := 2
defer calc("1", a, calc("10", a, b))
a = 0
defer calc("2", a, calc("20", a, b))
b = 1
}
請問這段程式碼能列印出什麼?
答案
10 1 2 3
20 0 2 2
2 0 2 2
1 1 3 4
解釋
在一個函式內如果有多個defer語句,那麼這些defer語句並不會馬上執行,而是會進入一個棧,函式return前,會按先後出的順序執行。也說是說最先被定義的defer語句最後執行。
所以,defer calc("2", a, calc("20", a, b))會先於defer calc("1", a, calc("10", a, b))執行。但是大家注意一點,這兩個defer語句calc函式內還有calc函式。所以,先要執行兩個calc函式內的calc函式。當這兩個內函式執行完畢,再按照順序執行其他程式碼。
關於defer和閉包的一些原理可以參考這兩篇文章
相關文章
- Java面試必看二十問題Java面試
- RabbitMQ面試專題,面試必看MQ面試
- 《Effective Go》--deferGo
- 高效背誦面試題、回答問題的技巧,求職者必看!面試題求職
- 面試Go 被defer的幾個盲區坑了面試Go
- java面試題-大學畢業必看Java面試題
- 資料庫面試題(開發者必看)資料庫面試題
- java面試題大合集(開發者必看)Java面試題
- Android拿高薪面試題必看Android高薪面試題
- Python工程師必看的面試問題與解答(中)Python工程師面試
- Go 面試題Go面試題
- Python面試50題!面試鞏固必看!【轉】Python面試
- go defer 學習筆記Go筆記
- 關於defer執行順序問題
- Go語言切片面試真題7連問Go面試
- GO 中 defer的實現原理Go
- 【Go進階—基礎特性】deferGo
- 必看Android500道高薪面試題集Android高薪面試題
- go面試題-基礎類Go面試題
- Go面試題答案與解析Go面試題
- Go基礎系列:defer、panic和recoverGo
- GO語言————6.4 defer 和追蹤Go
- Web前端年後跳槽必看的各種面試題Web前端面試題
- 面試問題面試
- go channel問題Go
- 清華尹成帶你實戰GO案例(7)Go DeferGo
- 百度搜尋 “Java面試題” 前200頁(面試必看)Java面試題
- 詢問面試官的面試問題面試
- iOS 面試必看,最全梳理iOS面試
- 面試反問問題面試
- go 中 defer 的一個隱藏功能Go
- Go 中的Defer,Panic 和 Recover 控制流Go
- 2. Go中defer使用注意事項Go
- Go語言中defer的一些坑Go
- Go 語言中 defer 使用時有哪些陷阱?Go
- Hadoop大資料面試題全版本,必看跳槽指南!Hadoop大資料面試題
- 【面試】面試題之汽水空瓶子問題面試題
- Typescript 面試問題TypeScript面試