我正在阅读文章Error handling and Go,并且不太明白为什么在返回类型实际为&errorString{text}
时必须返回指针(error
)?
我的理解是error
是一个接口,errorString
实现了接口,因此,返回errorString
也没关系(但事实并非如此)。
// New returns an error that formats as the given text.
func New(text string) error {
return &errorString{text}
}
errorString实现
// errorString is a trivial implementation of error.
type errorString struct {
s string
}
func (e *errorString) Error() string {
return e.s
}
答案 0 :(得分:6)
因为error
的{{1}}接口是为指针(errorString
)实现的,如果它实现如下,则会直接返回值:
func (e *errorString) Error()