问题:
func { defer func() { if err != nil { } } return err }
函数里return err后defer里的err是否会更新?
解答:
func (c *aaa) Aaa() (err error) { defer func() { if err != nil { } } return error.New("aaa") }
这种写法是可以的,因为return后,return的错误值会赋值给右上方的err,而右上方的err就是defer里的err
func (c *aaa) Aaa() (error) { var err error defer func() { if err != nil { } } return error.New("aaa") }
这种写法是不行的,return后赋值给右上角的error,是一个隐藏变量,这个隐藏变量不是第一行定义的那个err