请稍等 ...
×

采纳答案成功!

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

两个不同文件定义的type userError完全没搞懂

  1. 我把 web.go 里的 userError 中的 error 注释掉了, 程序仍能正常运行, 既然这样, 这里继承 error 的意义在哪里呢?
    图片描述
  2. 为什么 handler.go 中, userError 会自动找到病区去调用 Error() 这个方法, 而不会去调用 Message() 这个方法, 其中的原理是什么呢?
    图片描述

正在回答 回答被采纳积分+3

2回答

璀璨星空fly 2019-03-25 20:28:31

一: error写不写无所谓

二:并不是自动调用的,而是用类型断言判断为自定义的错误接口后手动调用的Message()

if userErr, ok := err.(userError); ok {
  http.Error(writer, userErr.Message(), http.StatusBadRequest)
  return
}

1 回复 有任何疑惑可以回复我~
bbmouse 2019-07-04 17:58:19

1.web.go里的error可以去掉,因为handler里面已经实现了error的方法

func (e UserError) Error() string {
   return e.Message()
}

2.userError(xxxxx)这一句应该并没有调用Error(), userError其实是个字符串,这里userError(xxxx)应该相当于string(xxxxx), 然后返回了这个字符串对象,又因为它实现了上面的函数,也就是Error接口的函数,所以就算handler的返回是Error,这个字符串也能返回

0 回复 有任何疑惑可以回复我~
  • wlxz #1
    userError(xxxxx)这一句 是有调用Error()的
    回复 有任何疑惑可以回复我~ 2020-02-01 01:45:12
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信