-
Notifications
You must be signed in to change notification settings - Fork 10.6k
Closed
Description
谢老师,这里的描述有些问题。
地址: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
}
Metadata
Metadata
Assignees
Labels
No labels