【golang】http.ListenAndServe源码解析

http.ListenAndServe

func ListenAndServe(addr string, handler Handler) error

ListenAndServe监听TCP地址addr,并且会使用handler参数调用Serve函数处理接收到的连接。handler参数一般会设为nil,此时会使用DefaultServeMux。

接下来我们看一下这个函数的主要源码流程。

一、通过ListenAndServe的参数创建Server结构体

func ListenAndServe(addr string, handler Handler) error {
   
   
	server := &Server{
   
   Addr: addr, Handler: handler}
	return server.ListenAndServe()
}

Server 定义运行HTTP服务器的参数。Server的零值是一个有效的配置。

第一层相当于封装了一下创建Server结构体的过程,更易于用户使用,创建Server结构体之后,调用Server结构体的ListenAndServe方法。

二、定义监听信息(Listen)调用Serve处理请求

func (srv *Server) ListenAndServe() error {
   
   
	if srv.shuttingDown() {
   
   
		return ErrServerClosed
	}
	addr := srv.Addr
	if addr == "" {
   
   
		addr = ":http"
	}
	ln, err := net.Listen("tcp", addr)
	if err != nil {
   
   
		return err
	}
	return srv.Serve(ln)
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值