我想根據特定條件有條件地添加 http 處理程式
func ConditionalCheck(arg string) func(http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
check, ok := ctx.Value("specific").(bool);
if check {
SpecificCheck(arg)
} else {
next.ServeHTTP(w, r)
}
})
}
}
func SpecificCheck(arg string) func(http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// something
next.ServeHTTP(w, r)
})
}
}
chain := alice.New(ConditionalCheck, .........)
當我測驗時,SpecificCheckHandlerFunc沒有被呼叫。我如何根據條件鏈接它?
uj5u.com熱心網友回復:
SepecificCheck只回傳一個接受一個處理程式并回傳另一個處理程式的函式,它不執行任何回傳的物件。如果你想執行這些物件,你必須明確地這樣做,例如
SepecificCheck(arg)(next).ServeHTTP(w, r)
以上立即呼叫由回傳的中間件函式SepecificCheck,然后呼叫該中間件函式回傳ServeHTTP的處理程式上的方法。
然后更新后ConditionalCheck的內容如下:
func ConditionalCheck(arg string) func(http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
check, ok := ctx.Value("specific").(bool)
if check {
SpecificCheck(arg)(next).ServeHTTP(w, r)
} else {
next.ServeHTTP(w, r)
}
})
}
}
uj5u.com熱心網友回復:
您的函式 SpecificCheck 僅回傳匿名函式,但不呼叫它。你必須添加回傳函式的呼叫,就像這個 SpecificCheck(arg)()
例如
包主
匯入“fmt”
功能主(){
測驗(“尤金”)
}
功能測驗(名稱字串)功能(){
回傳函式(){
fmt.Println("你好!" 姓名)
}
}
如您所見,輸出為空
但是這段代碼可以正常作業
包主
匯入“fmt”
功能主(){
測驗(“尤金”)()
}
功能測驗(名稱字串)功能(){
回傳函式(){
fmt.Println("你好!" 姓名)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/364752.html
