Go语言中是否有内置方法直接返回HTTP 200状态码及空响应体?
完全可以用匿名内联函数实现,无需单独定义处理函数,符合Go语言的常见编码风格。
最简实现(无日志场景)
你只需要把路由注册的代码替换为下面一行即可,效果和你现有实现完全一致:
r.HandleFunc("/check", func(w http.ResponseWriter, r *http.Request) {}).Methods(http.MethodGet)
说明:Go标准库
net/http的处理函数如果没有显式调用w.WriteHeader设置状态码,默认会返回200 OK,处理函数没有写入任何响应内容时,自然返回空响应体。
保留错误日志的实现
如果你需要保留原有实现中的写入空字节、错误日志逻辑,也可以把完整逻辑内联到匿名函数中,依旧可以写成一行:
r.HandleFunc("/check", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK); if _, err := w.Write([]byte{}); err != nil { log.Error().Msgf("cannot send 200 answer → %v", err) } }).Methods(http.MethodGet)
完整示例代码
package main import ( "net/http" "github.com/gorilla/mux" "github.com/rs/zerolog/log" ) func main() { r := mux.NewRouter() r.Use(mux.CORSMethodMiddleware(r)) // 一行实现check接口,无需额外定义处理函数 r.HandleFunc("/check", func(w http.ResponseWriter, r *http.Request) {}).Methods(http.MethodGet) err := http.ListenAndServe("0.0.0.0:9991", r) if err != nil { log.Panic().Msgf("cannot start web server: %v", err) } }
内容的提问来源于stack exchange,提问作者WoJ
相关产品推荐
相关产品推荐

