Golang 返回&errorString,而不是errorString的原因 - Go语言中文社区

Golang 返回&errorString,而不是errorString的原因


 

 

Errors包

查看golang的errors包你会发现其源码是:

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

// errorString is a trivial implementation of error.
type errorString struct {
	s string
}

func (e *errorString) Error() string {
	return e.s
}

返回了一个实现error接口的errorString类型的指针。 那为啥不是返回errorString的值类型??

你可能会说:因为只有 `*errorString` 才有 `Error` 方法啊...

错, 而且打错特错。

正解:

我们在调用errors.New("")来返回一个错误时, 可以通过比较指针,来比较error是否相等, 实际上就是控制相同的错误我们只创建一个error对象。否则对象复制一下,在比较就是false了。

而且指针才会与nil相比较, 如果是字符串"" 虽然错误内容为空,但是还是有错误的。

 

转载于:https://my.oschina.net/90design/blog/1797132

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_34258782/article/details/91929138
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-02 18:42:28
  • 阅读 ( 941 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢