gpt4 book ai didi

go - 为什么这两个错误不相等

转载 作者:行者123 更新时间:2023-12-01 22:42:45 24 4
gpt4 key购买 nike

我在我的包中创建了一个错误并将其与 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com