Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Meluluskan Konteks dalam Middleware dan Pengendali dalam Go?
Memahami konteks dalam Go boleh mengelirukan. Mari kita terokai cara menghantar konteks secara berkesan kepada perisian tengah dan pengendali.
Untuk menghantar konteks kepada perisian tengah, ikut langkah berikut:
Sebagai contoh, untuk menambah tamat masa kepada permintaan:
ctx, cancel := context.WithTimeout(r.Context(), time.Duration(60*time.Second)) defer cancel() r = r.WithContext(ctx)
Untuk lulus konteks kepada pengendali:
Sebagai contoh, untuk menambah ID pengguna pada konteks:
ctx := context.WithValue(r.Context(), ContextUserKey, "theuser") h.ServeHTTP(w, r.WithContext(ctx))
Berikut ialah contoh pelaksanaan perisian tengah dan pengendali menggunakan konteks:
func checkAuth(authToken string) util.Middleware { return func(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.Header.Get("Auth") != authToken { util.SendError(w, "...", http.StatusForbidden, false) return } // Add authentication-specific context here h.ServeHTTP(w, r) }) } } type Handler struct { ... ... } func (h *HandlerW) ServeHTTP(w http.ResponseWriter, r *http.Request) { // Get context values here decoder := json.NewDecoder(r.Body) // ... } func main() { router := mux.NewRouter() authToken, ok := getAuthToken() if !ok { panic("...") } authCheck := checkAuth(authToken) h := Handler{ ... } router.Handle("/hello", util.UseMiddleware(authCheck, Handler, ...)) }
Atas ialah kandungan terperinci Bagaimana untuk Meluluskan Konteks dalam Middleware dan Pengendali dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!