Go 什么是回报&;obj是什么意思?它对平等性检查有什么影响

Go 什么是回报&;obj是什么意思?它对平等性检查有什么影响,go,Go,返回有什么区别 func New(text string) error { return &errorString{text} } 或者像这样回来 func New(text string) error { return errorString{text} } errorString的定义如下 type errorString struct { text string } type error interface { Error() string } 错误定义如下 type

返回有什么区别

func New(text string) error { return &errorString{text} }
或者像这样回来

func New(text string) error { return errorString{text} }
errorString的定义如下

type errorString struct { text string }
type error interface {
  Error() string
}
错误定义如下

type errorString struct { text string }
type error interface {
  Error() string
}
我特别想知道返回值的差异是什么:

return &errorString{text}
      vs.
return errorString{text}

我已经看过指南了,但没有提到区别。它只提到,对于一个对象,您不能使用与错误对象不希望使用的相等的对象。

errorString{text}
是一个结构,而
&errorString{text}
是一个指向结构的指针。有关这意味着什么的更详细解释,请参阅

还有一个问题详细说明了何时返回:。返回
errorText{text}
返回整个结构的副本,而
&errorText{text}
返回指向结构的指针

结构
S
和指向类型
S
的结构的指针是Go中两种不同的类型。对于
errorText
要实现
error
接口,
errorText
必须实现
error()string
方法,但它还需要具有正确的接收器类型

例如,这是确定的:

type errorText struct {
    text string
}

func (e errorText) Error() string { return e.text }

func SomethingThatReturnsYourError() error {
    return errorText{"an error"}
}
这也可以:

type errorText struct {
    text string
}

func (e errorText) Error() string { return e.text }

func SomethingThatReturnsYourError() error {
    return &errorText{"an error"} // Notice the &
}
但这不正常,编译器将提示您一个错误:

type errorText struct {
    text string
}

// notice the pointer receiver type
func (e *errorText) Error() string { return e.text }

func SomethingThatReturnsYourError() error {
    return errorText{"an error"}
}
错误消息:
无法将errorString文本(类型errorString)用作返回参数中的类型错误:
errorString未实现错误(错误方法具有指针接收器)

要使用指针接收器,必须返回指针:

type errorText struct {
    text string
}

func (e *errorText) Error() string { return e.text }

func SomethingThatReturnsYourError() error {
    return &errorText{"an error"}
}