可以在function criletal中修改本地变量?
func foo()func foo()(结果int,error error){ defer func(){ 如果e:= recover(); e!= nil { 结果= -1 err = errors.new(e。(string)) } }() 酒吧() 结果= 100 err = nil 返回 } func bar(){ 恐慌(“恐慌发生”) } 此代码按预期工作,将结果设置为-1,并在从恐慌中恢复后将其设置为自定义错误消息。但是,如果我们在函数文字中使用局部变量,则行为会发生变化: func foo()(int,error){ 变量结果int VAR错误错误 defer func(){ 如果e:= recover(); e!= nil { 结果= -1 err = errors.new(e。(string)) } }() 酒吧() 结果= 100 err = nil 返回结果,错误 } func bar(){ 恐慌(“恐慌发生”) }
在这种情况下,结果将重置为0而不是-1。这是因为函数中的defer语句文字无法访问或修改指定的返回值,因为它们不再处于范围。根据GO文档,“ ...如果延迟函数是一个字面的函数,并且周围的函数的命名结果参数在字面意义上访问并在deferred wife in IT的范围中访问并修改了结果。尝试使用函数文字中的延期语句修改它们时使用命名返回值的关键。在这种情况下,本地变量无法访问或修改。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3