Melalukan Konteks dalam Golang Permintaan kepada Middleware
Memahami mekanisme konteks yang diperkenalkan dalam Golang 1.7 boleh mencabar. Artikel ini bertujuan untuk menjelaskan cara menyampaikan konteks secara berkesan kepada fungsi middleware dan pengendali.
Konteks Terbitan
Seperti yang dinyatakan dalam catatan blog Go Concurrency Patterns, anda boleh memperoleh konteks daripada konteks latar belakang. Objek Permintaan juga menyediakan kaedah Konteks dan DenganKonteks. Ini membolehkan anda membuat konteks tersuai untuk tujuan tertentu.
Melaksanakan Tamat Masa
Dalam pengendali permintaan anda, anda boleh menentukan tamat masa menggunakan kaedah Tanpa Masa. Ini mewujudkan konteks terbitan dengan tamat masa yang ditetapkan.
ctx, cancel := context.WithTimeout(r.Context(), time.Duration(60*time.Second)) defer cancel() r = r.WithContext(ctx)
Menambah Maklumat Pengguna pada Konteks
Dalam penyemak kebenaran anda, anda boleh menambahkan maklumat pengguna pada konteks sebelum memanggil ServeHTTP.
type ContextKey string const ContextUserKey ContextKey = "user" // ... ctx := context.WithValue(r.Context(), ContextUserKey, "theuser") h.ServeHTTP(w, r.WithContext(ctx))
Mendapatkan Maklumat Pengguna daripada Konteks
Dari dalam pengendali, anda boleh mengakses maklumat pengguna daripada konteks.
user := r.Context().Value(ContextUserKey) doSomethingForThisUser(user.(string))
Merangkai Middleware dengan Konteks
Dalam fungsi utama anda, anda boleh merantai pengendali middleware menggunakan util.UseMiddleware, menghantar konteks pada setiap satu pengendali.
router.Handle("/hello", util.UseMiddleware(authCheck, HandlerW, ...))
Kesimpulan
Dengan mengikut langkah-langkah ini, anda boleh menghantar konteks dalam permintaan Golang dengan berkesan kepada fungsi middleware dan pengendali, meningkatkan fleksibiliti dan mengekalkan keselamatan benang dalam kod anda.
Atas ialah kandungan terperinci Bagaimana untuk Menyalurkan Konteks dengan Berkesan kepada Middleware dan Pengendali di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!