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"}
}