为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Go 中的错误可以为零?

为什么 Go 中的错误可以为零?

Go
慕姐8265434 2022-06-01 17:53:29
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给一个值变量。这是如何运作的?
查看完整描述

1 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

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

内置类型error是 an interface,所有接口值都是可空的,所以error也是可空的。


查看完整回答
反对 回复 2022-06-01
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信