golang异常处理,返回异常无法捕获

为什么defer fun()中返回的error,调用的地方,获取到位nil?

func call1(x string) (string, error) {  
   fmt.Println("into call1")  
   var reback string \= ""  
  
  canset := false  
 defer func() (string, error) {  
      i := recover()  
      if i != nil {  
         fmt.Println("异常信息捕获:", i, "反射到的y是否可以编辑?", canset)  
         j := fmt.Sprintf("%s", i)  
  
         //这里返回的异常,外层无法拦截到?  
  return "", errors.New("异常信息捕获:" \+ (j))  
      } else {  
         return reback, nil  
  }  
   }()  
   a := x  
 y := reflect.ValueOf(x)  
   canset \= y.CanSet()  
  
   y.SetString("10")  
   b := x  
  //报错了 reflect.flag.mustBeAssignable using unaddressable value  reback \= "反射修改前:" \+ a \+ "反射修改后:" \+ b  
  fmt.Println(reback)  
   return reback, nil  
}
阅读 3.7k
2 个回答

defer 的函数不需要返回值,因为没有接收者

你可以给函数 call1 的第二个返回值一个名字,如 err error,在 defer 里面 直接为 err 赋值即可

楼上说的很明白了。defer事go里面的延迟执行语句。可以跟匿名函数配合使用

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题