Maison >développement back-end >Golang >Comment utiliser Golang http

Comment utiliser Golang http

(*-*)浩
(*-*)浩original
2019-12-03 10:43:243011parcourir

Comment utiliser Golang http

On dit que la bibliothèque standard go est pratique et que la conception de l'API est simple. Cette fois, j'utiliserai le package net/http de la bibliothèque standard go pour implémenter un serveur Web http simple, comprenant trois versions.

La version la plus simple (Apprentissage recommandé : go)

Utiliser directement

http.HandleFunc(partern,function(http.ResponseWriter,*http.Request){})

HandleFunc accepte deux paramètres, le premier est l'adresse de routage et le second est la méthode de traitement.

//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"))
}

Handler personnalisé

En regardant le code source de la bibliothèque standard, la version v1 appelle en fait la méthode handle Le HandlerFunc entrant implémente la méthode ServeHTTP du Handler. C'est ServeHTTP qui effectue le traitement des requêtes http.

Comment utiliser Golang http

Comment utiliser Golang http

Comment utiliser Golang http

À partir de là, nous pouvons personnaliser notre propre gestionnaire, le code est le suivant :

// 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"))
}

Configuration personnalisée du serveur

J'ai déjà eu affaire à Handler une fois. Jetons un coup d'œil aux secrets de http.ListenAndServe().

Comment utiliser Golang http

Il s'avère que vous pouvez personnaliser ici la configuration du serveur http, qui se trouve entièrement dans la structure du serveur. Cet objet peut configurer le port d'adresse d'écoute. et configurez le délai d'attente de lecture et d'écriture. Time, configurez le gestionnaire, configurez le nombre maximum d'octets de l'en-tête de requête..., le tout légèrement modifié le programme précédent pour obtenir le programme actuel :

// 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"))
}
.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn