Go 为什么这两个错误不相等
我在包中创建了一个err,并将其与io.EOF进行比较,但==操作数为false。但它们的类型和价值是一样的吗?为什么==操作数返回falseGo 为什么这两个错误不相等,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”,错误,错误,错误) } 这两个错误不相等,因为它们的指针不相等。它包含一个指
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都会返回一个不同的错误值,即使文本相同。”文档包含两个简短的句子,其中第二个是对您问题的回答。值得先查阅官方文件并通读。