参考答案
结论:defer只能修改命名返回值,不能改匿名返回值。原理:Go函数命名返回(如func f() (r int))时return先赋值r再执行defer,defer修改r即改返回槽;匿名返回时return将局部变量拷贝到匿名槽,defer改局部量不影响结果。示例:func f() (x int){ defer func(){x=10}(); return 5 } 返回10;func g() int{ x:=5; defer func(){x=10}(); return x } 返回5。