Mengapa Pelayan Web Mudah ini Dicetak Sekata?
Dalam latihan pengaturcaraan Go ini, pelayan web ringkas direka untuk mengira dan memaparkan berapa kali ia dipanggil. Walau bagaimanapun, apabila memuat semula halaman, nilai yang dicetak kelihatan hanya meningkat dengan nombor genap (cth., 1, 3, 5...).
Memahami Susunan Panggilan Fungsi
Setiap permintaan HTTP yang masuk mencetuskan panggilan ke fungsi pengendali yang ditentukan (HelloWorld dalam kes ini). Walau bagaimanapun, di bawah hud, penyemak imbas membuat permintaan tambahan untuk sumber, termasuk /favicon.ico.
Memandangkan pelayan tidak diprogramkan untuk bertindak balas dengan sewajarnya kepada permintaan favicon, penyemak imbas terus memintanya pada setiap muat semula halaman . Permintaan tambahan ini menambah satu kaunter panggilan.
Melaraskan Logik Kaunter
Untuk mengira bilangan muat semula halaman dengan betul, pelayan perlu mengabaikan permintaan tambahan ini. Satu penyelesaian adalah dengan hanya menambah pembilang apabila laluan permintaan ialah akar ("/").
func HelloWorld(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { return } count := atomic.AddInt64(&calls, 1) fmt.Fprintf(w, "You've called me %d times", count) }
Sebagai alternatif, pelayan boleh mengecualikan permintaan khusus untuk favicon.ico.
func HelloWorld(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/favicon.ico" { return } count := atomic.AddInt64(&calls, 1) fmt.Fprintf(w, "You've called me %d times", count) }
Atas ialah kandungan terperinci Mengapa Pelayan Web Simple Go Saya Hanya Menunjukkan Kiraan Panggilan Bernombor Genap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!