type Handler interface { ServeHTTP(ResponseWriter, *Request) }


1. 启动调用listenAndServe, 创建一个Server结构体对象server, server.ListenAndServer()函数 func ListenAndServe(addr string, handler Handler) error { server := &Server{Addr: addr, Handler: handler} return server.ListenAndServe() }

Server结构体含有一个Handler参数,该参数的类型如下:(任何实现了ServeHTTP函数的都是Handler接口的实现)

2。Server.ListenAndServer函数(其中主要调用net.Listen 和 Server.Serve函数)

3。Server.Serve函数说明: 在主goroutine里for循环阻塞,accept获取连接请求, 然后调用Server.newConn()创建客户端,

这里,调用newConn函数,会创建一个conn结构体的示例客户端,其中的server参数是Server实例

conn.serve函数主要调用serverHandler.ServeHTTP函数,这里先用Server实例对象去实现了一个serverHandler结构实例,然后执行它的ServeHTTP方法函数,从下面的图2可以看到, 就是调用了 Server.Handler.ServerHTTP函数,(注意,这里如果Server.Handler为nil, 会将handler赋值为DefaultServerMux,它是一个ServerMux的实例)


ServeMux结构体截图如下:




构建自定义的Handler:





go-restful的源码说明:
container:如果没有创建新的,则使用默认的container。 webservice: 一个容器中可以有多个webservice,一个webservice中可以加入多个route



将自定义的route处理函数注册到ServeMux,关键是看这个add()函数



