Maison >développement back-end >Golang >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.
À 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().
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!