golang return error 被屏蔽 err is shadowed during return

func ErrorTest() (err error) {
   {
      err := errors.New("i am error test")
      if err != nil {
         fmt.Println(err)
         return //err is shadowed during return
      }

   }
   return
}

局部定义的变量 err := errors.New("i am error test"),会被命名返回值屏蔽,在条件判断里也有这种问题,需要特别注意。

解决方案就是显示返回 err,修改代码如下:

func ErrorTest() (err error) {
   {
      err := errors.New("i am error test")
      if err != nil {
         fmt.Println(err)
         return err
      }

   }
   return
}

你可能感兴趣的:(golang)