亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于 defer 行為的 Go 語言面試問題

關于 defer 行為的 Go 語言面試問題

Go
墨色風雨 2023-08-14 17:20:33
我有兩個代碼示例:func test() int {    var x int    defer func() {        x++    }()    x = 1    return x}func main() {    fmt.Println(test())}它返回:1。但是,以下代碼示例的行為有所不同:func test() (x int) {    defer func() {        x++    }()    x = 1    return}func main() {    fmt.Println(test())}它返回2。
查看完整描述

1 回答

?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

Golang 規范對于 defer 語句是這樣說的:

[...]如果延遲函數是函數文字并且周圍函數具有在該文字范圍內的命名結果參數,則延遲函數可以在返回結果參數之前訪問和修改結果參數。

(我的重點)

在您的第一個片段中,函數test沒有命名返回參數;x只是一個局部變量。因此,您的 defer 語句無法修改 function 的結果test。

在第二個代碼片段中,函數test有一個命名的返回參數x,該參數位于函數文字的范圍內。因此, defer 語句可以(并且確實)修改 function 的結果test。


查看完整回答
反對 回復 2023-08-14
  • 1 回答
  • 0 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號