终止HTTP请求的服务无非是从
ServeHTTP()方法中返回,例如:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // examine incoming params if !ok { str := `{"Result":"","Error":"No valide Var"}` fmt.Fprint(w, str) return } // Do normal API serving})panic(http.ListenAndServe(":8080", nil))笔记:
如果API服务的输入参数无效,则应考虑返回HTTP错误代码,而不是隐含的default
200OK。为此,您可以使用
http.Error()函数,例如:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // examine incoming params if !ok { http.Error(w, `Invalid input params!`, http.StatusBadRequest) return } // Do normal API serving})对于更复杂的示例,其中您将JSON数据与错误代码一起发送回:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // examine incoming params if !ok { w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusBadRequest) str := `{"Result":"","Error":"No valide Var"}` fmt.Fprint(w, str) return } // Do normal API serving})显示如何传播“返回”的示例
如果在之外(
ServeHTTP()例如在从中调用的函数中)检测到错误,则
ServeHTTP()必须返回此错误状态
ServeHTTP()才能返回。
假设您具有以下用于所需参数的自定义类型和一个负责根据请求对其进行解码的函数:
type params struct { // fields for your params }func depreParams(r *http.Request) (*params, error) { p := new(params) // depre params, if they are invalid, return an error: if !ok { return nil, errors.New("Invalid params") } // If everything goes well: return p, nil}使用这些:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { p, err := depreParams(r) if err != nil { http.Error(w, `Invalid input params!`, http.StatusBadRequest) return } // Do normal API serving})


