Go 为什么这两个错误不相等

Go 为什么这两个错误不相等,go,Go,我在包中创建了一个err,并将其与io.EOF进行比较,但==操作数为false。但它们的类型和价值是一样的吗?为什么==操作数返回false func TestErr(t*testing.t){ err:=errors.New(“EOF”) t、 日志(err==io.EOF) t、 Logf(“io错误:%t,%v,%p”,io.EOF,io.EOF,io.EOF) t、 Logf(“我的错误:%t,%v,%p”,错误,错误,错误) } 这两个错误不相等,因为它们的指针不相等。它包含一个指

我在包中创建了一个err,并将其与io.EOF进行比较,但==操作数为false。但它们的类型和价值是一样的吗?为什么==操作数返回false

func TestErr(t*testing.t){
err:=errors.New(“EOF”)
t、 日志(err==io.EOF)
t、 Logf(“io错误:%t,%v,%p”,io.EOF,io.EOF,io.EOF)
t、 Logf(“我的错误:%t,%v,%p”,错误,错误,错误)
}

这两个错误不相等,因为它们的指针不相等。它包含一个指向基础值的指针。
io.EOF
由以下人员创建:

var EOF = errors.New("EOF")
如果查看
错误。新建

func New(text string) error {
    return &errorString{text}
}

type errorString struct {
    s string
}

因此,
io.EOF
指向
errorString
struct的一个实例,您创建的错误也指向具有相同字符串值的
errorString
struct的一个实例,但两个指针不相同。

如果您确实想这样做,您可以打开错误:

package main

import (
   "errors"
   "io"
)

func main() {
   err := errors.New("EOF")
   println(err.Error() == io.EOF.Error())
}

来自文档:“New返回一个错误,格式与给定文本相同。每次调用New都会返回一个不同的错误值,即使文本相同。”文档包含两个简短的句子,其中第二个是对您问题的回答。值得先查阅官方文件并通读。