Adakah contoh pelayan2 dalam buku bahasa pengaturcaraan Go salah?

王林
Lepaskan: 2024-02-05 23:06:08
ke hadapan
958 orang telah melayarinya

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()
}
Salin selepas log masuk

main.go

package main

import "book/server"

func main() {
    server.Run()
}
Salin selepas log masuk

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'
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!