Golang搭建HTTP服务

http://www.jianshu.com/p/be3d9cdc680b
人世间-小哥力作,思路清晰,讲的较全面。

简单概括:
构建HTTP服务分为两步
1.注册路由
2.实例化server并监听客户端请求

1.注册路由

注册路由可以使用DafaultServeMux,同样可以创建一个新的ServerMux。

(1) 使用DefaultServeMUX

这种方式直接调用Http.HandleFunc(pattern,handler)即可,因为HandleFunc内部通过DafaultServeMux调用serverMux的HandleFunc进行了路由注册。

(2) 使用自定义的ServeMUX

首先需要使用http.NewServeMux()创建一个ServeMux,然后利用该ServeMux进行路由注册。
-1) mux.HandleFunc()//将一个handle函数转变为handle转变为handle处理器
-2) mux.handle()//将一个handle对象转变为一个handle处理器

在(1) (2)中其实都用到了mux的HandleFunc方法,只是一个是DafaultServeMux,另一个是自定义的ServeMux。

func (mux *ServeMux) HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
    mux.Handle(pattern, HandlerFunc(handler))
}

在HandleFunc函数内部的HandlerFunc是一个函数类型,同时他实现了Handle接口,所以调用mux.HandleFunc会将一个Handle函数变成一个Handle处理器。

2.监听处理

当有请求来临时,DafaultServeMux或者自定义的mux会在其内部的路由表内找到对应的路由处理器并进行生成相响应和回复功能。

如果路由较多,可以通过使用一个中间件进行一些相关内容的处理,比如错误接收,时间的打印等等。这样可以有效的减少代码的冗余。

func safeHandler(fn http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        defer func() {
            if e, ok := recover().(error); ok {
                http.Error(w, e.Error(), http.StatusInternalServerError)
                fmt.Println("err")
            }
        }()
        fn(w, r)
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值