两个不同文件定义的type userError完全没搞懂
来源:8-5 服务器统一出错处理2

浔無涯
2019-03-21
- 我把 web.go 里的 userError 中的 error 注释掉了, 程序仍能正常运行, 既然这样, 这里继承 error 的意义在哪里呢?
- 为什么 handler.go 中, userError 会自动找到病区去调用 Error() 这个方法, 而不会去调用 Message() 这个方法, 其中的原理是什么呢?
写回答
2回答
-
璀璨星空fly
2019-03-25
一: error写不写无所谓
二:并不是自动调用的,而是用类型断言判断为自定义的错误接口后手动调用的Message()
if userErr, ok := err.(userError); ok {
http.Error(writer, userErr.Message(), http.StatusBadRequest)
return
}10 -
bbmouse
2019-07-04
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,这个字符串也能返回
012020-02-01
相似问题