>[danger] # 事件回调注册 ![](https://box.kancloud.cn/bc81eea5b75c47c042272beaf389ab53_1062x600.png) ghttp.Server提供了事件回调注册功能,支持用户对于某一事件进行自定义监听处理,按照URI pattern方式进行绑定注册。支持多个方法对同一事件进行监听,ghttp.Server将会按照注册顺序进行回调方法调用。 相关方法如下: ```go func (s *Server) BindHookHandler(pattern string, hook string, handler HandlerFunc) error func (s *Server) BindHookHandlerByMap(pattern string, hookmap map[string]HandlerFunc) error ``` 当然域名对象也支持事件回调注册: ```go func (d *Domain) BindHookHandler(pattern string, hook string, handler HandlerFunc) error func (d *Domain) BindHookHandlerByMap(pattern string, hookmap map[string]HandlerFunc) error ``` 支持的事件列表: 1. ```BeforeServe``` 在进入/初始化服务对象之前。 1. ```AfterServe``` 在完成服务执行流程之后。 1. ```BeforeOutput``` 向客户端输出返回内容之前。 1. ```AfterOutput``` 向客户端输出返回内容之后。 1. ```BeforeClose``` 在http请求关闭之前(注意请求关闭是异步处理操作,没有在http执行流程中处理)。 1. ```AfterClose``` 在http请求关闭之后(注意请求关闭是异步处理操作,没有在http执行流程中处理)。 使用示例: ```go package main import ( "fmt" "gitee.com/johng/gf/g/net/ghttp" ) func main() { p := "/" s := ghttp.GetServer() s.BindHookHandlerByMap(p, map[string]ghttp.HandlerFunc{ "BeforeServe" : func(r *ghttp.Request){ fmt.Println("BeforeServe") }, "AfterServe" : func(r *ghttp.Request){ fmt.Println("AfterServe") }, "BeforeOutput" : func(r *ghttp.Request){ fmt.Println("BeforeOutput") }, "AfterOutput" : func(r *ghttp.Request){ fmt.Println("AfterOutput") }, "BeforeClose" : func(r *ghttp.Request){ fmt.Println("BeforeClose") }, "AfterClose" : func(r *ghttp.Request){ fmt.Println("AfterClose") }, }) s.BindHandler(p, func(r *ghttp.Request) { r.Response.Write("哈喽世界!") }) s.SetPort(8199) s.Run() } ``` 当访问```http://127.0.0.1:8199/```时,运行Web Server进程的终端将会按照事件的执行流程打印出对应的事件名称。