我尝试将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
奇怪的是,e
与error(e)
的比较返回true
,但将它们与nil
的比较却得出不同的结果。
演员阵容有问题吗?如果是,应该怎么做?