v1
1 package main 2 3 import ( 4 "log" 5 "net/http" 6 ) 7 8 func main() { //根路由 9 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { 10 w.Write([]byte("Hello, this is version 1.")) //字符串转换成字节 11 }) 12 http.HandleFunc("/bye", sayBye) 13 14 log.Println(" Starting V1 Server ... " ) // print for a log 15 log.Fatal (http.ListenAndServe ( " : 400 " , nil)) // generally not performed 16 } . 17 18 is FUNC sayBye (W http.ResponseWriter, * R & lt http.Request) { . 19 w.Write ([] byte ( " Bye BYE the this Version 1. IS " )) 20 is }
result
V2
package main import ( "log" "net/http" ) func main() { mux := http.NewServeMux() mux.Handle("/", &myHandler{}) mux.HandleFunc("/bye", sayBye) log.Println("Starting server... v2") log.Fatal(http.ListenAndServe(":40", mux)) } func sayBye(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Bye bye this is version 2!")) } type myHandler struct{} func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello v2, the request URL is: " + r.URL.String())) }
result
V3
package main import ( "log" "net/http" "os" "os/signal" "time" ) func main() { server := &http.Server{ Addr: ":40000", WriteTimeout: time.Second * 2, } quit := make(chan os.Signal) signal.Notify(quit, os.Interrupt) mux := http.NewServeMux() mux.Handle("/", &myHandler{}) mux.HandleFunc("/bye", sayBye) go func() { <-quit if err := server.Close(); err != nil { log.Fatal("Close server:", err) } }() server.Handler = mux log.Print("Starting server... v3") err := server.ListenAndServe() if err != nil { if err == http.ErrServerClosed { log.Print("Server closed under request.") } else { log.Fatal("Server closed unexpected") } } } func sayBye(w http.ResponseWriter, r *http.Request) { time.Sleep(3 * time.Second) w.Write([]byte("Bye bye this is version 3.")) } type myHandler struct{} func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello v3, the request URL is:" + r.URL.String())) }
result
Write Timeout after 2 seconds 4 seconds to change