我在我的包中创建了一个错误并将其与 io.EOF 进行比较,但 == 操作数是错误的。但是它们的类型和值是否相同?为什么 == 操作数返回 false?
func TestErr(t *testing.T) {
err := errors.New("EOF")
t.Log(err == io.EOF)
t.Logf("io err:%T,%v,%p", io.EOF, io.EOF, io.EOF)
t.Logf("my err:%T,%v,%p", err, err, err)
}
这两个错误不相等,因为它们的指针不相等
最佳答案
error
是一个接口(interface)。它包含一个指向基础值的指针。 io.EOF
由以下人员创建:
var EOF = errors.New("EOF")
如果你看
errors.New
:func New(text string) error {
return &errorString{text}
}
type errorString struct {
s string
}
所以,
io.EOF
指向 errorString
的实例struct,并且您创建的错误也指向 errorString
的实例struct 具有相同的字符串值,但两个指针不相同。
关于go - 为什么这两个错误不相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61004616/