Apabila menggunakan pelayan web Go ini untuk mengira seruannya, ia mencetak nombor tidak sekata sebaliknya daripada urutan jangkaan 1, 2, 3...:
package mainimport ( "fmt" "net/http" ) var calls int // HelloWorld print the times being called. func HelloWorld(w http.ResponseWriter, r *http.Request){ calls++ fmt.Fprintf(w, "You've called me %d times", calls) } func main() { fmt.Printf("Started server at http://localhost%v.\n", 5000) http.HandleFunc("/", HelloWorld) http.ListenAndServe(":5000", nil) }
Tingkah laku yang diperhatikan adalah disebabkan oleh pengendalian pelayar terhadap fail favicon.ico. Apabila halaman web dimuatkan, penyemak imbas membuat permintaan untuk fail ini, yang merupakan ikon tapak web standard. Memandangkan pelayan web yang disediakan oleh kod yang diberikan tidak menyediakan favicon.ico yang sah, penyemak imbas berulang kali memintanya.
Memandangkan setiap permintaan dikira sebagai permohonan pengendali HelloWorld, kiraan panggilan meningkat walaupun apabila pengguna hanya memuat semula halaman sekali sahaja. Permintaan favicon.ico diapit antara seruan URL akar ("/") yang dikendalikan oleh fungsi HelloWorld, mengakibatkan urutan nombor tidak sekata.
Untuk mengelakkan ini, seseorang boleh menyemak laluan permintaan dalam HelloWorld berfungsi dan abaikan permintaan untuk favicon.ico:
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) }
Pengubahsuaian ini memastikan bahawa kiraan panggilan bertambah hanya untuk permintaan ke URL akar. Sebagai alternatif, seseorang boleh melumpuhkan permintaan favicon.ico sama sekali dalam konfigurasi pelayan web.
Atas ialah kandungan terperinci Mengapa Kiraan Panggilan Pelayan Web Saya Hanya Menunjukkan Nombor Ganjil?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!