我正在阅读Error handling and Go文章,但不太了解为什么当返回类型实际上是&errorString{text}时必须返回一个指针(error)?

我的理解是error是一个接口(interface),而errorString实现了该接口(interface),因此,返回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
}

最佳答案

因为errorerrorString接口(interface)是针对指针(func (e *errorString) Error())实现的,所以如果像下面这样实现,则将直接返回值:

func (e errorString) Error() string {
    return e.s
}

关于pointers - 当返回类型实际上是错误时,为什么需要返回一个指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23032720/

10-11 21:46