Errors包
查看golang的errors包你会发现其源码是:
func New(text string) error {
return &errorString{text}
}
// errorString is a trivial implementation of error.
type errorString struct {
s string
}
func (e *errorString) Error() string {
return e.s
}
返回了一个实现error接口的errorString类型的指针。 那为啥不是返回errorString的值类型??
你可能会说:因为只有 `*errorString` 才有 `Error` 方法啊...
错, 而且打错特错。
正解:
我们在调用errors.New("")来返回一个错误时, 可以通过比较指针,来比较error是否相等, 实际上就是控制相同的错误我们只创建一个error对象。否则对象复制一下,在比较就是false了。
而且指针才会与nil相比较, 如果是字符串"" 虽然错误内容为空,但是还是有错误的。