Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah contoh pelayan2 dalam buku bahasa pengaturcaraan Go salah?

Adakah contoh pelayan2 dalam buku bahasa pengaturcaraan Go salah?

王林
王林ke hadapan
2024-02-05 23:06:08978semak imbas

Adakah contoh pelayan2 dalam buku bahasa pengaturcaraan Go salah?

Kandungan soalan

Saya sedang membaca "Go Programming Language Book". Dalam Bab 1, Pelayan 2 Contoh: Kod Buku, mutex digunakan untuk menghalang keadaan perlumbaan. Walau bagaimanapun, saya menyalin kod dan cuba menjalankannya, tetapi hasilnya tidak konsisten. Adakah kod dalam contoh salah?

Beginilah cara saya menggunakan kod:

server.go

package server

import (
    "fmt"
    "log"
    "net/http"
    "sync"
)

const (
    port string = ":8000"
)

var count int

var mu sync.mutex

func run() {
    http.handlefunc("/", handler)
    http.handlefunc("/count", counter)
    fmt.printf("server is listening on port: %s\n", port)
    log.fatal(http.listenandserve(port, nil))
}

func handler(w http.responsewriter, r *http.request) {
    mu.lock()
    count++
    mu.unlock()
    fmt.fprintf(w, "url path = %q\n", r.url.path)
}

func counter(w http.responsewriter, r *http.request) {
    mu.lock()
    fmt.fprintf(w, "count = %d\n", count)
    mu.unlock()
}

main.go

package main

import "book/server"

func main() {
    server.Run()
}

Apabila saya menjalankan: pergi jalankan main.go dan akses dua halaman localhost:8000 dan localhost:8000/count

  1. Setiap kali saya memuat semula halaman /count, kiraan bertambah. kenapa?
  2. Setiap kali saya memuat semula halaman / dan /kira, kiraan yang dipaparkan meningkat secara tidak konsisten? Bukan berdasarkan bilangan penyegaran. kenapa?

Saya menjangkakan kiraan hanya meningkat apabila saya melawat halaman / bukannya halaman /count, dan akan meningkat berdasarkan kekerapan saya memuat semula.


Jawapan betul


Itu kerana apabila anda menguji halaman web dengan penyemak imbas, kebanyakan masa, penyemak imbas juga menghantar permintaan kepada http://localhost:8000/favicon.ico. Lihat tangkapan skrin di bawah:

/favicon.ico 没有专用的处理程序,它与 / 匹配,因此将由 server.handler Memproses.

Adalah disyorkan untuk menggunakan alat lain untuk menguji demo tersebut. Contohnya, curl:

$ curl 'http://localhost:8000/'
$ curl 'http://localhost:8000/count'

Atas ialah kandungan terperinci Adakah contoh pelayan2 dalam buku bahasa pengaturcaraan Go salah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam