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 }