将错误比较为nil的结果不同

时间:2018-11-21 11:19:45

标签: go null

我尝试将nil(类型为*MyError)转换为错误。通过将cast变量的值与nil进行比较,结果是不同的。这是代码:

package main

import (
    "fmt"
)

type MyError struct {
    err error
}

func (e *MyError) Error() string {
    return e.err.Error()
}

func nilErr() *MyError {
    return nil
}

func main() {
    e := nilErr()
    fmt.Println(e) // <nil>
    fmt.Println(error(e)) // <nil>

    fmt.Printf("%#v\n", e) // (*main.MyError)(nil)
    fmt.Printf("%#v\n", error(e)) // (*main.MyError)(nil)

    fmt.Println(e == error(e)) // true

    fmt.Println(e == nil) // true
    fmt.Println(error(e) == nil) // false
}

游乐场:try code

奇怪的是,eerror(e)的比较返回true,但将它们与nil的比较却得出不同的结果。

演员阵容有问题吗?如果是,应该怎么做?

0 个答案:

没有答案