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
Barbara Streisandasal
2024-11-10 10:36:02317semak imbas

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)

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!

Kenyataan:
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