我需要一個“檢查”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直接在路由代碼中作為單行處理?
uj5u.com熱心網友回復:
使用空處理程式(主體為空的處理程式函式:){}。如果您不向回應撰寫器寫入任何內容且未設定狀態代碼,則默認情況下將發回 HTTP 200 OK。
你也可以使用匿名函式(函式文字):
r.HandleFunc("/check", func(http.ResponseWriter, *http.Request){}).
Methods(http.MethodGet)
uj5u.com熱心網友回復:
Go 不提供以 200 狀態和空回應主體進行回應的處理程式,但是當處理程式不呼叫任何回應撰寫器方法時會發生這種情況。
如果處理程式不呼叫WriteHeader,則服務器以 200 狀態代碼回應。對 WriteHeader 的顯式呼叫主要用于發送錯誤代碼。
回應正文是處理程式寫入回應的任何內容。如果處理程式不寫入回應,則回應為空。
使用空函式發送帶有空正文的 200 回應:
send200 := func(http.ResponseWriter, *http.Request) {}
r.HandleFunc("/check", send200).Methods(http.MethodGet)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/341475.html
