我對返回值使用“延遲”有一些問題。我嘗試以不同的方式運行一個測試函數(shù)(只是 i 的定義不同),但結果不同。所以,我對不同的返回值感到困惑。這是問題所在:功能 1:package mainimport "fmt"func main() { fmt.Println("a return:", a()) // return value: 0}func a() int { var i int defer func() { i++ fmt.Println("a defer1:", i) // print " a defer1: 1" }() return i}返回值:a defer1: 1a return: 0功能2:package mainimport "fmt"func main() { fmt.Println("a return:", a()) // return value: 1}func a() (i int) { defer func() { i++ fmt.Println("a defer1:", i) // print " a defer1: 1" }() return i}返回值:a defer1: 1a return: 1一個返回值是0,另一個是1。所以,問題是這兩個函數(shù)有什么區(qū)別。
1 回答

素胚勾勒不出你
TA貢獻1827條經驗 獲得超9個贊
這兩個功能有什么區(qū)別?
Go 編程語言規(guī)范
推遲聲明
“延遲”語句調用一個函數(shù),該函數(shù)的執(zhí)行被推遲到周圍函數(shù)返回的那一刻。
每次執(zhí)行“defer”語句時,調用的函數(shù)值和參數(shù)都會像往常一樣計算并重新保存,但不會調用實際函數(shù)。相反,延遲函數(shù)會在周圍函數(shù)返回之前立即被調用,順序與它們被延遲的順序相反。
如果延遲函數(shù)是一個函數(shù)文字,并且周圍的函數(shù)在文字范圍內命名了結果參數(shù),則延遲函數(shù)可以在返回結果參數(shù)之前訪問和修改結果參數(shù)。如果延遲函數(shù)有任何返回值,它們將在函數(shù)完成時被丟棄。
不同之處在于帶有命名結果參數(shù)的周圍函數(shù)
func?a()?(i?int)
與具有未命名結果參數(shù)的周圍函數(shù)
func?a()?int
- 1 回答
- 0 關注
- 174 瀏覽
添加回答
舉報
0/150
提交
取消