Pola Middleware
Merangkai handler untuk logging dan autentikasi
Pola Middleware adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Apa itu perantara?
Perantara adalah fungsi yang membungkus http.Handler untuk menambahkan perilaku lintas fungsi (pencatatan, autentikasi, pemulihan) tanpa mengubah logika bisnis penangan.
Tanda tangan perantara
Perantara adalah fungsi yang menerima http.Handler dan mengembalikan http.Handler:
type Middleware func(http.Handler) http.HandlerPerantara pencatatan sederhana
Catat setiap permintaan sebelum dan sesudah penangan dijalankan:
func Logger(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
log.Printf("%s %s", r.Method, r.URL.Path)
next.ServeHTTP(w, r)
log.Printf("done %s", r.URL.Path)
})
}Merangkai perantara
Terapkan beberapa lapisan perantara dengan menyusunnya secara bertingkat:
handler := Logger(Auth(RateLimit(myHandler)))
http.ListenAndServe(":8080", handler)Pembantu rangkaian perantara
Buat fungsi rangkaian untuk menerapkan perantara secara berurutan tanpa penyusunan bertingkat yang dalam:
func Chain(h http.Handler, m ...Middleware) http.Handler {
for i := len(m)-1; i >= 0; i-- {
h = m[i](h)
}
return h
}
// Usage: Chain(myHandler, Logger, Auth, RateLimit)Perantara Auth
Periksa autentikasi sebelum memanggil penangan berikutnya. Kembalikan 401 lebih awal jika token tidak ada atau tidak valid.
func Auth(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
token := r.Header.Get("Authorization")
if !isValid(token) {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
next.ServeHTTP(w, r)
})
}Perantara pemulihan dari kepanikan
Tangkap kepanikan dari penangan agar peladen tidak mogok:
func Recovery(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
defer func() {
if err := recover(); err != nil {
log.Printf("panic: %v", err)
http.Error(w, "Internal Server Error", 500)
}
}()
next.ServeHTTP(w, r)
})
}Meneruskan data melalui konteks
Perantara dapat melampirkan data ke konteks permintaan agar dapat digunakan oleh penangan di hilir:
ctx := context.WithValue(r.Context(), userKey, user)
next.ServeHTTP(w, r.WithContext(ctx))Pembungkus respons
Tangkap kode status yang ditulis penangan dengan membungkus ResponseWriter:
type statusRecorder struct {
http.ResponseWriter
status int
}
func (r *statusRecorder) WriteHeader(code int) {
r.status = code
r.ResponseWriter.WriteHeader(code)
}Urutan itu penting
Perantara dijalankan sesuai urutan pembungkusannya. Auth harus dijalankan sebelum pembatasan laju; pemulihan kepanikan harus berada paling luar agar dapat menangkap kepanikan dari perantara lain.
Perantara per rute dibandingkan global
Terapkan perantara global (pencatatan, pemulihan) ke seluruh mux. Terapkan perantara khusus rute (autentikasi, pembatasan laju) ke kelompok rute tertentu menggunakan subperute atau pembungkus penangan.
Pemeriksaan Singkat
Apa tanda tangan yang benar untuk perantara HTTP di Go?
Rangkuman: Pola Perantara
Poin penting:
- Perantara: func(http.Handler) http.Handler
- Rangkai dengan penyusunan bertingkat; gunakan pembantu Chain agar lebih jelas
- Recovery paling luar; Auth sebelum logika bisnis
- Teruskan data ke hilir melalui konteks
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pola Middleware” gratis?
Ya — teks lengkap “Pola Middleware” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pola Middleware”?
Merangkai handler untuk logging dan autentikasi Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Pola Middleware” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.