之前我写了一篇 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)

    http.ListenAndServe(":8080",mux)
}

海生
104 声望32 粉丝

与黑夜里,追求那一抹萤火。