登录
首页 >  Golang >  Go问答

为什么 Go 中的错误类型可以为 nil?

来源:stackoverflow

时间:2024-03-17 23:09:29 235浏览 收藏

Go 语言中,错误类型可以为 nil,因为它是一个接口类型,而接口类型在 Go 中是可为 nil 的。错误类型由 error 接口定义,所有实现 error 接口的类型都可以作为错误值。内置的 errorString 类型实现了 error 接口,并且它是一个值类型,而不是指针类型。因此,错误类型可以既是值类型(例如 errorString),也可以是指针类型(例如 errors.new() 返回的类型)。

问题内容

go 中的错误可能为零。编译如下:

var err error
   err = nil 
   err = errors.new("hello")

然而,错误也是值,并且值类型在 go 中不可为空。

error,是一个普通的接口:

type error interface {
    error() string
}

由该结构实现:

type errorstring struct {
    s string
}

这里没有指针。有一个方法需要一个指针接收器,

func (e *errorstring) error() string {
    return e.s
}

但这并不能解释为什么 error 表现为指针而不是值。

errors.new() 确实返回一个指针,

func New(text string) error {
    return &errorString{text}
}

这使得上面的第三行代码更加令人费解——我们将 new 的结果分配给一个值变量。

这是如何工作的?


解决方案


我认为您可能混淆了一些概念。是的,“错误就是值”,因为它们不是可以抛出的异常,而是只是从函数返回的常规值,就像任何其他返回值一样。 Go 质量“错误即值”与值与引用语义无关。

内置类型error是一个interface,并且所有接口值都是nilable,因此error是nilable。

理论要掌握,实操不能落!以上关于《为什么 Go 中的错误类型可以为 nil?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>