请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

正在回答

3回答

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

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 回复 有任何疑惑可以回复我~
  • 提问者 尼克2018 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2021-01-12 15:03:37
提问者 尼克2018 2021-01-08 19:25:07

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

0 回复 有任何疑惑可以回复我~
  • 提问者 尼克2018 #1
    傻瓜,这里实现error是因为handler 出参数是error,这样一来相当于userError也是error类型啦。
    回复 有任何疑惑可以回复我~ 2022-02-08 20:55:40
提问者 尼克2018 2021-01-08 18:47:35

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

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

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

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信