Heim > Backend-Entwicklung > Golang > So verwenden Sie Golang http

So verwenden Sie Golang http

(*-*)浩
Freigeben: 2019-12-03 10:43:24
Original
3045 Leute haben es durchsucht

So verwenden Sie Golang http

Es wird gesagt, dass die Go-Standardbibliothek praktisch und das API-Design einfach ist. Dieses Mal werde ich das Paket net/http in der Go-Standardbibliothek verwenden, um einen einfachen http-Webserver zu implementieren, einschließlich dreier Versionen.

Die einfachste Version (Lernempfehlung: go)

Direkt verwenden

http.HandleFunc(partern,function(http.ResponseWriter,*http.Request){})
Nach dem Login kopieren

HandleFunc akzeptiert zwei Parameter, der erste ist die Routing-Adresse und der zweite ist die Verarbeitungsmethode.

//v1
func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
         w.Write([]byte("httpserver v1"))
       })
       http.HandleFunc("/bye", sayBye)
       log.Println("Starting v1 server ...")
       log.Fatal(http.ListenAndServe(":1210", nil))
 }

func sayBye(w http.ResponseWriter, r *http.Request) {
      w.Write([]byte("bye bye ,this is v1 httpServer"))
}
Nach dem Login kopieren

Benutzerdefinierter Handler

Wenn man sich den Quellcode der Standardbibliothek ansieht, ruft die Version 1 tatsächlich die Handle-Methode auf. Tatsächlich implementiert die eingehende HandlerFunc die ServeHTTP-Methode des Handlers. Es ist ServeHTTP, das die HTTP-Anforderungsverarbeitung durchführt.

So verwenden Sie Golang http

So verwenden Sie Golang http

So verwenden Sie Golang http

Daraus können wir unseren eigenen Handler anpassen. Der Code lautet wie folgt :

// v2
func main() {
   mux := http.NewServeMux()
   mux.Handle("/", &myHandler{})
   mux.HandleFunc("/bye", sayBye)

   log.Println("Starting v2 httpserver")
   log.Fatal(http.ListenAndServe(":1210", mux))
}
type myHandler struct{}

func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
      w.Write([]byte("this is version 2"))
}
func sayBye(w http.ResponseWriter, r *http.Request) {
     w.Write([]byte("bye bye ,this is v2 httpServer"))
}
Nach dem Login kopieren

Benutzerdefinierte Serverkonfiguration

Ich habe mich schon einmal mit dem Handler befasst, werfen wir einen Blick auf die Geheimnisse in http.ListenAndServe().

So verwenden Sie Golang http

Es stellt sich heraus, dass Sie hier die HTTP-Serverkonfiguration anpassen können, die sich in der Serverstruktur befindet. Dieses Objekt kann den Überwachungsadressport konfigurieren und konfigurieren Sie das Lese- und Schreib-Timeout, konfigurieren Sie den Handler, konfigurieren Sie die maximale Anzahl von Bytes des Anforderungsheaders ... alle vorherigen Programme wurden leicht geändert, um das aktuelle Programm zu erhalten:

// v3
func main() {
    mux := http.NewServeMux()
    mux.Handle("/", &myHandler{})
    mux.HandleFunc("/bye", sayBye)

    server := &http.Server{
        Addr:         ":1210",
        WriteTimeout: time.Second * 3,            //设置3秒的写超时
        Handler:      mux,
    }
    log.Println("Starting v3 httpserver")
    log.Fatal(server.ListenAndServe())
}

type myHandler struct{}

func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("this is version 3"))
}

func sayBye(w http.ResponseWriter, r *http.Request) {
       // 睡眠4秒  上面配置了3秒写超时,所以访问 “/bye“路由会出现没有响应的现象
    time.Sleep(4 * time.Second)              
    w.Write([]byte("bye bye ,this is v3 httpServer"))
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Golang http. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage