1. 首页
  2. 主题
  3. Go问与答

defer中拿不到返回值?

EddieChan1993 · · 1627 次点击
### `err返回值`没有获取到,求解答! ``` package main import "fmt" func main() { fmt.Println(Parse()) } func Parse() error { var err error defer func() { //选择性的recover switch p := recover(); p { case nil: case "what": err = fmt.Errorf("internal error") fmt.Println(err) default: panic(p) } }() panic("what") return err } ``` ### **输出值**: ``` internal error <nil> ```
return、defer执行顺序应该是: 1. return要返回值的赋值操作(nil) 2. defer语句 (这个时间对err赋值已经晚了,因为return将要返回的值已经进行过赋值,nil) 3. return 这样的步骤吧,如果想赋值可以这样 ``` package main import &#34;fmt&#34; func main() { fmt.Println(Parse()) } func Parse()(err error){ defer func() { //选择性的recover switch p := recover(); p { case nil: case &#34;what&#34;: err = fmt.Errorf(&#34;internal error&#34;) fmt.Println(err) default: panic(p) } }() panic(&#34;what&#34;) return err } ``` 具体的可以看这篇博文:https://my.oschina.net/henrylee2cn/blog/505535
#3
更多评论
都panic 了,你去哪拿返回值啊
#1

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中