【问题标题】:Why a pointer needs to be returned when the return type is actually error?当返回类型实际上是错误时,为什么需要返回指针?
【发布时间】:2014-04-12 15:57:32
【问题描述】:

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

我的理解是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
}

【问题讨论】:

    标签: pointers error-handling go


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,阿扬。它就像你说的那样工作。我注意到的一件事是,如果按照你说的那样实现,无论是直接返回还是返回指针都工作,你知道为什么吗?
    • 这是为类型定义方法集的方式:golang.org/ref/spec#Method_sets
    • *T 类型可以调用接收器定义为 *T 或 T 的方法
    猜你喜欢
    • 1970-01-01
    • 2015-05-20
    • 2021-01-17
    • 2021-03-11
    • 2012-10-03
    • 2021-01-11
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多