On the HTTP server network programming language of go

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

 

Guess you like

Origin www.cnblogs.com/chenguifeng/p/11782688.html