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

标签 go

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

相关文章:

http - 无法访问前端应用程序中的自定义响应 header

dictionary - 与Go中的 map 相比,搜索无序数组要花多少个元素

go - Kubernetes客户端找不到模块

git - 如何在带有私有(private)存储库的 Jenkins 中使用 go 模块?

function - 如何使用函数作为 map 的键

go - AWS Lambda GoLang 错误

GO Lang Markdown 应用

templates - tmpl.执行并分文件golang

byte - 如何将 4 字节的 slice 转换为 rune ?在围棋

Go & Socket.io HTTP + WSS 在一个端口上与 CORS?