函数 | 说明 |
---|---|
http.ServeMux | 是 Go 语言标准库中的一个多路复用器(multiplexer)。它用于路由和处理 HTTP 请求,将请求分发到相应的处理器函数。 |
http.HandleFunc | 是 Go 语言标准库中的一个函数,用于注册处理器函数来处理 HTTP 请求。它是对 http.ServeMux 的简化封装,方便快速实现路由功能。 |
http.Handler | 接口定义了一个方法 ServeHTTP,该方法接收两个参数:ResponseWriter 和 Request。它用于处理传入的 HTTP 请求并生成相应的 HTTP 响应。 |
http.ListenAndServe | 是 Go 语言标准库中的一个函数,用于启动一个 HTTP 服务器并开始监听指定的地址和端口,以接收和处理传入的 HTTP 请求。 |
一、使用 http.ServeMux 的一些基本操作:
1、创建一个新的 ServeMux:
mux := http.NewServeMux()
2、注册处理器函数并指定 URL 路径:
mux.HandleFunc("/hello", helloHandler)
mux.HandleFunc("/foo", fooHandler)
//在上面的例子中,当 /hello 路径接收到请求时,helloHandler 函数将被调用;当 /foo 路径接收到请求时,fooHandler 函数将被调用。
3、创建一个 HTTP 服务器并指定 ServeMux 作为处理器:
server := &http.Server{Addr: ":8080",Handler: mux,
}
//创建了一个监听 8080 端口的 HTTP 服务器,并将 mux 作为处理器。
4、启动服务器:
err := server.ListenAndServe()
if err != nil {panic(err)
}
//这会开始监听指定的端口,并开始接受和处理请求。
完整示例:
package mainimport ("net/http""time"
)func main() {mux := http.NewServeMux()mux.HandleFunc("/", handler)server := &http.Server{Addr: ":8080",Handler: http.TimeoutHandler(mux, 2*time.Second, "Timeout"),ReadTimeout: 5 * time.Second,WriteTimeout: 10 * time.Second,}err := server.ListenAndServe()if err != nil {panic(err)}
}func handler(w http.ResponseWriter, r *http.Request) {time.Sleep(3 * time.Second) // 模拟长时间处理的操作w.Write([]byte("Hello, World!"))
}
package mainimport ("net/http""time"
)func main() {http.HandleFunc("/", handler)http.ListenAndServe(":8081", nil)
}func handler(w http.ResponseWriter, r *http.Request) {w.Write([]byte("Hello, World!"))
}
-------------end