Rumah >pembangunan bahagian belakang >Golang >Mengapa pengendali fungsi Go HTTP saya dipanggil dua kali?
Pengendali Fungsi HTTP Dipanggil Tanpa Jangka
Apabila menggunakan pengendali HTTP dalam Go, adalah penting untuk memahami cara permintaan diproses. Dalam senario biasa, penyemak imbas bukan sahaja membuat permintaan kepada URL akar tetapi juga meminta fail ikon bernama "/favicon.ico" untuk tujuan visual. Permintaan tambahan ini boleh menyebabkan fungsi pengendali dipanggil dua kali.
Contoh:
Pertimbangkan kod berikut yang menambah pembilang pada setiap lawatan halaman:
package main import ( "fmt" "io" "log" "net/http" ) var counter int func hello(w http.ResponseWriter, r *http.Request) { counter++ io.WriteString(w, fmt.Sprintf("Hello world! Counter: %d", counter)) log.Println("hello.") } func main() { mux := http.NewServeMux() mux.HandleFunc("/", hello) http.ListenAndServe(":8000", mux) }
Pemerhatian:
Jika anda mengakses port 8000 dalam pelayar web, anda akan perasan bahawa pengendali "hello" dipanggil dua kali. Ini kerana penyemak imbas juga membuat permintaan untuk "/favicon.ico." Jika anda menggunakan cURL untuk mengakses URL yang sama, pengendali hanya dipanggil sekali.
Untuk memahami dan menyelesaikan isu ini, hanya log permintaan. Anda akan melihat bahawa permintaan kedua adalah untuk "/favicon.ico." Untuk mengelakkan perkara ini, anda boleh sama ada:
Memahami aliran permintaan HTTP dan mempertimbangkan kes kelebihan tertentu akan membantu anda menulis pelayan web yang mantap dan boleh dipercayai dengan Go.
Atas ialah kandungan terperinci Mengapa pengendali fungsi Go HTTP saya dipanggil dua kali?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!