【发布时间】:2021-12-14 12:29:16
【问题描述】:
我需要一个“检查”HTTP 端点,它只会回复 200 代码和空正文。我的解决方案需要一个单独的函数:
package main
import (
"net/http"
"github.com/gorilla/mux"
"github.com/rs/zerolog/log"
)
func main() {
r := mux.NewRouter()
r.Use(mux.CORSMethodMiddleware(r))
r.HandleFunc("/check", send200).Methods(http.MethodGet)
err := http.ListenAndServe("0.0.0.0:9991", r)
if err != nil {
log.Panic().Msgf("cannot start web server: %v", err)
}
}
func send200(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
_, err := w.Write([]byte{})
if err != nil {
log.Error().Msgf("cannot send 200 answer → %v", err)
}
}
它按预期工作:
curl -v http://localhost:9991/check
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 9991 (#0)
> GET /check HTTP/1.1
> Host: localhost:9991
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Fri, 29 Oct 2021 12:11:06 GMT
< Content-Length: 0
有没有一种更简单、可能更 Golangic 的方式来直接在路由代码处将/check 作为单线处理?
【问题讨论】:
-
当然,跳过
Write。WriteHeader将发送 200 响应。