美文网首页
Golang 中的 err shadowing 问题

Golang 中的 err shadowing 问题

作者: LLLeon | 来源:发表于2018-09-19 13:45 被阅读30次

今天编译代码时遇到了这个问题,记录一下。

在一个函数中,给返回的 error 定义了名称。这个函数定义类似下面这样:

func foo(a string) (err error) {
    res, err := bar(a)
    if err != nil {
        return
    }
    
    // do anything else
    
    return
}

编译时会报这样的错误:

../../../../server/init.go:455:4: err is shadowed during return

这个问题很容易被忽略,返回的错误意思是函数在 return 时,err 被覆盖了,被谁覆盖了?

本来在调用 bar 函数发生错误时,应该返回的是当前发生的错误,但由于返回值中定义了错误名称,所以返回的是外面函数返回值中定义的 err,而不是 if err != nil 里这个 err,这样应当返回的错误就被外面那个 err 给覆盖了。

如果还要用这种定义返回值名称的方式,可以显式的返回 if 中的错误:

func foo(a string) (err error) {
    res, err := bar(a)
    if err != nil {
        return err
    }
    
    // do anything else
    
    return
}

不过这种写法还是没有在函数内部显式的声明变量来的直观:

func foo(a string) error {
    res, err := bar(a)
    if err != nil {
        return err
    }
    
    // do anything else
    
    return nil
}

相关文章

  • Golang 中的 err shadowing 问题

    今天编译代码时遇到了这个问题,记录一下。 在一个函数中,给返回的 error 定义了名称。这个函数定义类似下面这样...

  • Golang变量遮蔽——Shadowing

    在golang中,我们经常会用:=来声明变量,这很方便但也会带来一些问题。当变量遇到作用域时就容易产生shadow...

  • 如何优化Golang中重复的错误处理

    Golang 错误处理最让人头疼的问题就是代码里充斥着「if err != nil」,它们破坏了代码的可读性,本文...

  • golang err!=nil

    今天写代码的时候,发现一个和预期不符合的逻辑。简单描述就是把一个值为nil的A类型的error赋值给接口error...

  • Golang常用操作

    总结Golang在实际开发中的常用操作,以便快速查找 处理错误 包装一个错误处理函数,避免大量重复if err!=...

  • 聊聊golang的zap的error

    序 本文主要研究一下golang的zap的error error zap@v1.16.0/error.go Err...

  • goland常用快捷键

    1. err.nn 在golang中有很多时候需要处理类似如下的error逻辑: goland 为我们集成了这段代...

  • go环境安装相关资料

    解决vscode中golang插件依赖安装失败问题

  • golang error 处理

    用了golang也有一段时间了,在我推动golang在公司项目应用工程中也发现了很多问题,关于公司的golang工...

  • vue-cli 脚手架使用中遇到的问题

    在安装完cue-cli npminstall过程中遇到如下问题: npm ERR! code EINTEGRITY...

网友评论

      本文标题:Golang 中的 err shadowing 问题

      本文链接:https://www.haomeiwen.com/subject/pshinftx.html