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和閉包的一些原理可以參考這兩篇文章
相關文章
- RabbitMQ面試專題,面試必看MQ面試
- Python工程師必看的面試問題與解答(中)Python工程師面試
- Python面試50題!面試鞏固必看!【轉】Python面試
- 面試Go 被defer的幾個盲區坑了面試Go
- 高效背誦面試題、回答問題的技巧,求職者必看!面試題求職
- Go 面試題Go面試題
- java面試題-大學畢業必看Java面試題
- 2019 必看 Android 高階面試題總結Android面試題
- 必看Android500道高薪面試題集Android高薪面試題
- 資料庫面試題(開發者必看)資料庫面試題
- java面試題大合集(開發者必看)Java面試題
- 詢問面試官的面試問題面試
- 百度搜尋 “Java面試題” 前200頁(面試必看)Java面試題
- 面試反問問題面試
- go面試題-基礎類Go面試題
- 【面試】面試常見問題整理面試
- Typescript 面試問題TypeScript面試
- iOS 面試問題iOS面試
- Pig面試問題面試
- Hive 面試問題Hive面試
- 測試面試問題(二)面試
- Hadoop大資料面試題全版本,必看跳槽指南!Hadoop大資料面試題
- 面試疑難問題面試
- 面試問題總結面試
- cmake Makefile面試問題面試
- 昨天的面試問題面試
- 2020Java實習必看面試兩百題解析 (下)Java面試
- Web前端開發必看的100道大廠面試題Web前端面試題
- 找工作面試時要問的事,大學生必看面試
- Go語言最新面試題及其解析Go面試題
- Go面試必考題目之method篇Go面試
- Go面試必考題目之slice篇Go面試
- 邦芒面試:面試時要問清楚的幾個問題面試
- 面試 HTTP ,99% 的面試官都愛問這些問題面試HTTP
- go defer 學習筆記Go筆記
- 軟體測試面試問題(一)面試
- Spring Boot面試問題| BaeldungSpring Boot面試
- Redis最常見面試問題Redis面試