为什么错误不匹配零?去
问题描述:
为什么当你使用否定比较错误与零如果提供预期的输出,但当你试图比较它使用'积极'的运算符'不起作用'?我觉得代码见下面为什么错误不匹配零?去
package main
import "fmt"
import "errors"
func main() {
err := makeError
if err != nil {
fmt.Println("as expected")
err = noError
if err == nil {
fmt.Println("as expected")
} else {
fmt.Println("Why no error ?")
}
}
}
func makeError() error {
return errors.New("error!")
}
func noError() (err error) {
return
}
答
在您的示例代码,err
不是错误值。用下面的任务:
err := makeError
err
是func() error
类型。 err != nil
成功,因为makeError
函数不是nil
。同样,noError
也是一个功能,并不等于nil
。
如果你真的调用函数,你应该得到你期望的结果。
答
的问题是,你不打电话给你的功能,但本身的功能分配给您的变量。所以err
的值总是不同于nil
。
例子:
func foo() error {
return nil
}
func bar() error {
return errors.New("error")
}
// err will be the same as the foo function
// you can then do err()
err := foo
// err will be an error var, nil in this case
// err != nil will return false
err := foo()
// err will be an error var, equivalent to errors.New("error")
err := bar()
如果您尝试创建变量,然后分配给它,你的编译器会骂你(如预期)。例如:
func foo() error {
return nil
}
var err error
err = foo
会给你以下编译器错误
在分配不能使用FOO(类型FUNC()错误)类型错误: FUNC()误差不执行错误(缺少错误法)
你是故意插入函数'makeError'到变量'err'中,还是那个错误?尝试用'err:= makeError()'和'err = noError()' –
首先:仔细阅读http://golang.org/doc/faq#nil_error。第二:解决安德烈亚斯指出的问题。 – Volker