之前我写了一篇 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()
}
我们发现其实有两步。
- 自定义mux
- 自定义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)
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。