Go 中的错误可以为零。以下编译:
var err error
err = nil
err = errors.New("hello")
然而错误是值,而值类型在 Go 中不能为空。
看error,是一个普通的界面:
type error interface {
Error() string
}
由这个结构实现:
type errorString struct {
s string
}
这里没有指针。有一种方法需要一个指针接收器,
func (e *errorString) Error() string {
return e.s
}
然而,这并不能解释为什么error表现为指针而不是值。
errors.New()确实返回一个指针,
func New(text string) error {
return &errorString{text}
}
这使我上面的第三行代码更加令人费解——我们将结果分配New给一个值变量。
这是如何运作的?
子衿沉夜
相关分类