Go中为何返回错误指针却用error而非*error作为返回类型?
Go错误返回类型的疑问
我有Java开发背景,正在学习Go语言,对这段代码里的错误返回逻辑存在困惑:
type MyError struct { message string Offset int } func (me *MyError) Error() string { return me.message } func myFunction() (int, error) { // 为什么返回类型是"error"而非"*error"? return 0, &MyError{"my error message", 0} // 这里返回的明明是MyError结构体的指针 } func main() { var _, err = myFunction() if e, ok := err.(*MyError); ok { // 这部分我已经理解:可以将error类型的err断言为指针类型 fmt.Printf("Error is %s: %d\n", e.message, e.Offset) } }
核心疑问
- 为什么
myFunction的错误返回类型声明为error,而不是*error?明明实际返回的是*MyError类型的指针。
内容的提问来源于stack exchange,提问作者user8473984
相关产品推荐
相关产品推荐

