从HandlerFunc返回错误-需要新类型

时间:2018-10-27 19:34:14

标签: go

现在我有这个:

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

2 个答案:

答案 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
}