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

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

浔無涯

2019-03-21

  1. 我把 web.go 里的 userError 中的 error 注释掉了, 程序仍能正常运行, 既然这样, 这里继承 error 的意义在哪里呢?
    图片描述
  2. 为什么 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
}

1
0

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,这个字符串也能返回

0
1
wlxz
userError(xxxxx)这一句 是有调用Error()的
2020-02-01
共1条回复

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

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

5995 学习 · 1909 问题

查看课程