问题:
- 这里有一个地方很不能理解,我明明是抛出userErrorActual的错误,为什么在处理HTTP响应时能够被userError断言成功?
根据课程视频中的代码逻辑:
- 我定义了2个类型,一个是接口userError,另外一个是字符串userErrorActual
type userError interface {
error
Message() string
}
type userErrorActual string
func (e userErrorActual) Error() string {
return e.Message()
}
func (e userErrorActual) Message() string {
return string(e)
}
- 然后我在处理请求路径时做了判断,判断如果不存在"/list/"子串的话就直接抛出userErrorActual
if strings.Index(request.URL.Path, "/list/") != 0 {
return userErrorActual("path must start with /list/")
}
...
if err != nil {
...
if userErr, userStatus := err.(userError); userStatus {
fmt.Println(userErr, userStatus)
http.Error(write, userErr.Message(), http.StatusBadRequest)
return
}
switch {
...
}
http.Error(write, http.StatusText(code), code)
}
...