现在我有这个:
type AppError struct{
Status int
Message string
}
func (h NearbyHandler) makeUpdate(v NearbyInjection) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
item, ok := v.Nearby[params["id"]]
if !ok {
return AppError{
500, "Missing item in map.",
}
}
}
}
问题是,如果我这样做:
func (h NearbyHandler) makeUpdate(v NearbyInjection) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) AppError { // <<< return AppError
}
}
不会编译b / c http.HandlerFunc的函数不会返回返回AppError的函数。
我还有另一个问题,如果我使用AppError作为返回值,如何避免显式返回nil
?
请注意,我收到此错误:
不能使用函数文字(类型func(http.ResponseWriter,* http.Request) AppError)作为返回参数类型http.HandlerFunc
答案 0 :(得分:0)
因此,go的设计人员没有返回请求的状态,而是给您ResponseWriter。这是您与客户的主要互动。例如,要设置状态码,请执行WriteHeader(500)
。
答案 1 :(得分:0)
不会编译b / c http.HandlerFunc的函数不会返回返回AppError的函数。
为什么不直接在makeUpdate方法中处理错误?
如果使用AppError作为返回值,如何避免显式返回nil?
不能在返回参数中使用'nil'作为AppError类型,可以使用初始值,如下所示:
func test() AppError {
ret := AppError{
200, "OK",
}
condition := true // some condition
if !condition {
ret.Status = 500
ret.Message = "internal error"
}
return ret
}