为什么这里定义接口一定要实现error的方法呢?,不理解

来源:8-5 服务器统一出错处理2

尼克2018

2021-01-08

type userError interface {
Error() string
Message() string
}

写回答

3回答

ccmouse

2021-01-12

这个问题非常好。关键在于看的角度不一样。

type userError interface {
Error() string
Message() string
}

这是一个接口,定义接口的时候我们先不考虑如何实现。Message()是给客户看的,最终返回在网页上的一个消息。Error()则没有特别的考虑,只是为了让它符合error接口,让userError是一个error。这个Error()可以返回跟Message()一样的内容,也可以返回不一样的。我们在这个接口处对此没有任何假设。对于Error()函数到底该返回什么样的string,error接口也同样没有规定。

总结来说Message是我们规定的,给用户看的消息。Error没有任何规定,为了符合error接口。

后面我的例子中,选择了Error()和Message()返回相同结果的做法。也可以不同,举个例子:

Error返回:code=0x1234, reason=permission denied

Message返回:sorry your access to the file is denied. you may go to xxx to ask for permission.


2
1
尼克2018
非常感谢!
2021-01-12
共1条回复

尼克2018

提问者

2021-01-08

难道就是为了Error方法里面的错误给系统打印出来,message方法里面的给用户展示这样子的区分吗?

0
1
尼克2018
傻瓜,这里实现error是因为handler 出参数是error,这样一来相当于userError也是error类型啦。
2022-02-08
共1条回复

尼克2018

提问者

2021-01-08

type userError interface {
  error
  //Message() string
}

我发现只要重写Error方法,不要Message也是可以的呀?

那这里,老师为啥非要再多定义一个message方法

0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程