Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menyalurkan Konteks dengan Berkesan kepada Middleware dan Pengendali di Golang?

Bagaimana untuk Menyalurkan Konteks dengan Berkesan kepada Middleware dan Pengendali di Golang?

Barbara Streisand
Lepaskan: 2024-11-10 10:36:02
asal
311 orang telah melayarinya

How to Effectively Pass Context to Middleware and Handlers in Golang?

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)
Salin selepas log masuk

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))
Salin selepas log masuk

Mendapatkan Maklumat Pengguna daripada Konteks

Dari dalam pengendali, anda boleh mengakses maklumat pengguna daripada konteks.

user := r.Context().Value(ContextUserKey)
doSomethingForThisUser(user.(string))
Salin selepas log masuk

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, ...))
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan