go使用net/http 创建web服务器-高阶篇

之前我写了一篇 go使用net/http 创建web服务器
这篇文档,简单的介绍了,如何创建 web服务器。这篇文章主要使用了DefaultServeMux。
但很多时候,比如我们的gin框架等,都自己实现了自定义Mux,今天我们也来学习下。

一、自定义ServeMux

我们回到上章的使用HandleFunc创建server,代码如下:

package main
import (
 "fmt"
 "net/http"
)
func index(w http.ResponseWriter, r *http.Request) {
 fmt.Fprintln(w, "Hello World")
}
func main() {
 http.HandleFunc("/index", index)
 http.ListenAndServe(":8080", nil)
}

这里我们修改一下使用自定义mux,变成代码如下:

package main
import (
 "fmt"
 "net/http"
 "time"
)
func index(w http.ResponseWriter, r *http.Request) {
 fmt.Fprintln(w, "Hello World")
}
func main() {
 mux := http.NewServeMux()
 mux.HandleFunc("/index", index)
 server := &http.Server{
 Addr: ":8080",
 Handler: mux,
 ReadTimeout: 20 * time.Second,
 WriteTimeout: 20 * time.Second,
 }
 server.ListenAndServe()
}

我们发现其实有两步。

  1. 自定义mux
  2. 自定义server

1.1 自定义mux

我们使用http.NewServeMux()来新建一个ServeMux,
然后再使用HandleFunc函数来注册路由。其实也是两步。

1.2 自定义server

我们使用http.Server{}来新建一个server。
然后使用server.ListenAndServe()方法来创建服务器以及监听端口。
在这里mux作为 server的一个参数传进来。

1.3 ListenAndServe优化

我们也可以把mux作为一个参数传到 ListenAndServe

package main
import (
 "fmt"
 "net/http"
 "time"
)
func index(w http.ResponseWriter, r *http.Request) {
 fmt.Fprintln(w, "Hello World")
}
func main() {
 mux := http.NewServeMux()
 mux.HandleFunc("/index", index)
 server.ListenAndServe(":8080",mux)
}
作者:赞原文地址:https://segmentfault.com/a/1190000043389012

%s 个评论

要回复文章请先登录注册