func main() { println(DeferFunc1(1)) println(DeferFunc2(1)) println(DeferFunc3(1))}func DeferFunc1(i int) (t int) { t = i defer func() { t += 3 }() return t}func DeferFunc2(i int) int { t := i defer func() { t += 3 }() return t}func DeferFunc3(i int) (t int) { defer func() { t += i }() return 2}上面的代碼將打?。? 1 3. 誰能解釋一下嗎?當(dāng)然DeferFunc1應(yīng)該返回4。但為什么 willDeferFunc2和will分別DeferFunc3返回1和呢?3這與 Go 中的閉包或變量作用域有關(guān)嗎?
1 回答

素胚勾勒不出你
TA貢獻1827條經(jīng)驗 獲得超9個贊
如果DeferFunc1
對您有意義,那么DeferFunc3
它們應(yīng)該說明相同的概念,即您可以修改命名的返回值。
在DeferFunc1
你的延遲中添加 3 到 1,得到你預(yù)期的 4。
在DeferFunc3
你的延遲中添加 1 到 2,得到 3。這里的裸返回,或者返回 t 會讓你得到 4。但在這種情況下,t
是在延遲運行之前分配值 2,因此您得到 3。
由于DeferFunc2
您沒有使用命名返回,因此您無法利用此技術(shù)。
- 1 回答
- 0 關(guān)注
- 165 瀏覽
添加回答
舉報
0/150
提交
取消