Skip to content

关于自定义error作为函数返回值的描述有些问题 #168

@hardPass

Description

@hardPass

谢老师,这里的描述有些问题。
地址:https://github.com/astaxie/build-web-application-with-golang/blob/master/11.1.md


下面这个代码包括注释来自原文中的例子

func Decode() *SyntaxError { // 错误,将可能导致上层调用者err!=nil的判断永远为true。
    var err *SyntaxError     // 预声明错误变量
    if 出错条件 {
        err = &SyntaxError{}
    }
    return err               // 错误,虽然err变量等于nil,但仍可能导致上层调用者err!=nil的判断为true
}

经过测试,发现上面的代码不会导致·上层调用者err!=nil的判断永远为true·的问题。
而如果函数签名的返回值改成error,才会出现这个问题。

func Decode() error {  // 会导致上层调用者err!=nil的判断永远为true。
    var err *SyntaxError 
    if 出错条件 {
        err = &SyntaxError{}
    }
    return err  
}

官方的推荐的方法是:

func Decode() error {  //这里是error,不是自定义type
    var err *SyntaxError 
    if 出错条件 {
        err = &SyntaxError{}
    }
    return nil               // 这里返回nil
}

参考了:http://golang.org/doc/faq#nil_error

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions