You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 07:27:07