This question already has an answer here:
Why are both handlers called each time I hit the server with a browser. I thought only one or the other would be called according to the book. What am I missing. If I hit url http://localhost:8000/foobar
- I am handler is printed twice and if I hit http://localhost:8000/count
- I am handler and I am count are both printed.
// Copyright © 2016 Alan A. A. Donovan & Brian W. Kernighan.
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
// See page 20.
//!+
// Server2 is a minimal "echo" and counter server.
package main
import (
"fmt"
"log"
"net/http"
"sync"
)
var mu sync.Mutex
var count int
func main() {
http.HandleFunc("/", handler)
http.HandleFunc("/count", counter)
log.Fatal(http.ListenAndServe("localhost:8000", nil))
}
// handler echoes the Path component of the requested URL.
func handler(w http.ResponseWriter, r *http.Request) {
mu.Lock()
count++
mu.Unlock()
fmt.Fprintf(w, "URL.Path = %q
", r.URL.Path)
fmt.Println("I am here in handler")
}
// counter echoes the number of calls so far.
func counter(w http.ResponseWriter, r *http.Request) {
mu.Lock()
fmt.Fprintf(w, "Count %d
", count)
mu.Unlock()
fmt.Println("I am here in counter")
}
//!-
</div>