http.HandleFunc
- Go kursu
- Orta seviye
- Ders 68/80
- 4 dk
HandleFunc ile yol karşılığı öğrenirsin.
http.HandleFunc ve ServeMux
http.ServeMux gelen isteği yola göre doğru işleyiciye yönlendirir. Go 1.22 ile kalıplar yöntem ve yol değişkeni içerebilir:
mux := http.NewServeMux()
mux.HandleFunc("GET /urunler", liste)
mux.HandleFunc("POST /urunler", ekle)
mux.HandleFunc("GET /urunler/{id}", getir)
mux.Handle("/statik/", http.StripPrefix("/statik/", http.FileServer(http.Dir("web"))))
http.ListenAndServe(":8080", mux)/ ile biten kalıp alt yolları da yakalar; en özel (uzun) kalıp kazanır.
Sunucu ayarları
http.ListenAndServe zaman aşımı içermez; yavaş istemciler bağlantıları sonsuza dek tutabilir. Üretimde bir http.Server yapılandırılır:
srv := &http.Server{
Addr: ":8080",
Handler: mux,
ReadHeaderTimeout: 5 * time.Second,
ReadTimeout: 10 * time.Second,
WriteTimeout: 15 * time.Second,
IdleTimeout: 60 * time.Second,
}
log.Fatal(srv.ListenAndServe())Uygulama Rotalar
Bir ServeMux'a "GET /merhaba/{ad}" rotasını ekle; "Merhaba " + r.PathValue("ad") yazsın. /merhaba/Ada için GET ve POST istekleri gönder; GET gövdesini ve POST'un durum kodunu yazdır.
Başlangıç kodu
package main
import (
"fmt"
"net/http"
"net/http/httptest"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"fmt"
"net/http"
"net/http/httptest"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("GET /merhaba/{ad}", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Merhaba "+r.PathValue("ad"))
})
get := httptest.NewRecorder()
mux.ServeHTTP(get, httptest.NewRequest("GET", "/merhaba/Ada", nil))
post := httptest.NewRecorder()
mux.ServeHTTP(post, httptest.NewRequest("POST", "/merhaba/Ada", nil))
fmt.Println(get.Body.String())
fmt.Println(post.Code)
}Beklenen çıktı
Merhaba Ada 405
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>"GET /urunler"</code> kalıbına <code>POST</code> isteği gelirse ne olur?
- İşleyici yine çalışır
- 404 döner
- Sunucu çöker
- 405 Method Not Allowed döner Doğru cevap
Açıklama: Go 1.22 ServeMux yol eşleşip yöntem eşleşmediğinde otomatik olarak 405 ve Allow başlığı döndürür.
2 Rota kaydet
mux := http.NewServeMux()
mux.____("GET /saglik", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("ok"))
})
mux := http.NewServeMux()
mux.HandleFunc("GET /saglik", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("ok"))
})
Açıklama: HandleFunc bir fonksiyonu kalıba işleyici olarak kaydeder.
3 Kalıp ve eşleşen yol
| Kavram | Anlamı |
|---|---|
"GET /urunler" |
Yalnızca GET /urunler |
"/statik/" |
/statik/ altındaki her şey |
"GET /urunler/{id}" |
/urunler/7 |
"/" |
Eşleşmeyen tüm yollar |