还记得之前有个http.ListenAndServe吗,现在来看看它的定义:
func ListenAndServe(addr string, handler Handler) error {
server := &Server{Addr: addr, Handler: handler}
return server.ListenAndServe()
}
可以看出,原来内部是实现了一个Server结构体,然后调用这个结构体对象的ListenAndServe函数。下面我们就自己来实现一个Server并用我们自定义的Server来实现一个HTTP服务,代码如下:
package main
import (
"io"
"net/http"
)
func main () {
mux := http.NewServeMux()
mux.HandleFunc("/hi", sayHi)
myServer := &http.Server{
Addr: "127.0.0.1:8080",
Handler: &MyHandler{mux},
}
//myServer.
myServer.ListenAndServe()
}
type MyHandler struct {
Mux *http.ServeMux
}
func (mh *MyHandler)ServeHTTP(w http.ResponseWriter, r *http.Request) {
mh.Mux.ServeHTTP(w, r)
}
func sayHi(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hi, this is cutom server")
}
到此,go web编程的第一阶段探索就到此告一段落。总结一下:
(1)可以用net库底层的默认ServeMux对象实现路由,我们只需要写好url路径的处理函数注册进去就可以了;
(2)我们自定义ServerMux对象,并实现ServeHTTP接口,同时可以自定义url路径处理函数。
(3)我们自定义Server对象,并调用该对象的ListenAndServe接口实现HTTP服务。
三种情景由浅入深自定义了HTTP服务的部分服务。
(全文完)
本文深入探讨了使用Go语言自定义HTTP服务的过程,包括利用net库实现路由、自定义ServerMux对象及ServeHTTP接口,最后通过自定义Server对象调用ListenAndServe接口实现HTTP服务。文章详细介绍了三种自定义HTTP服务的情景。
1542

被折叠的 条评论
为什么被折叠?



