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 server... v1") //打印一段日志 15 log.Fatal(http.ListenAndServe(":400", nil)) //一般不会被执行 16 } 17 18 func sayBye(w http.ResponseWriter, r *http.Request) { 19 w.Write([]byte("Bye bye this is version 1.")) 20 }
结果
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())) }
结果
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())) }
结果
写超时2秒改4秒后