package main import "fmt" func test(num int) int { defer func() { num = 2048 }() // 重要说明:执行return时会先把num的值保存一个到临时变量,然后转去执行defer的匿名函数,最后才把临时变量的值返回给函数调用处, // 注意是临时变量的值,而不是num的值。 return num } func main() { fmt.Printf("num = %+v \n", test(1024)) // num = 1024 } //========== 总结 ==========// // 函数使用匿名返回值时,可以无视所有的defer,即return后面的变量值就是最终返回值,在defer里修改该变量值也不会影响返回值。
package main import "fmt" func test(num int) (i int) { defer func() { num = 2048 i = num }() // 重要说明:执行到return时,会先转去执行defer的匿名函数,然后才把i的值返回给函数调用处,所以在defer里如果修改了i的值也 // 会影响最终返回结果。 return } func main() { fmt.Printf("num = %+v \n", test(1024)) // num = 2048 } //========== 说明 ==========// // 函数使用命名返回值时,在defer里修改返回值变量会影响最终返回结果。
Copyright © 2024 码农人生. All Rights Reserved