Go语言Web基础--Go的http包详解

本文详细探讨了Go语言的http包,重点解析了Conn的goroutine如何实现高并发和ServeMux的自定义功能。通过分析源码,展示了从Http.HandleFunc到ListenAndServe的执行流程,包括 Conn 的创建、ServeMux 路由分发机制,以及自定义路由器的实现方式。文章旨在帮助读者深入理解Go开发Web应用的基本原理。
摘要由CSDN通过智能技术生成

概要

前面介绍了Go怎么样实现了Web工作模式的一个流程,这里,我们将详细地解剖一下http包,看它到底是怎样实现整个过程的。

Go的http有两个核心功能:Conn、ServeMux


Conn的goroutine

与我们一般编写的http服务器不同, Go为了实现高并发和高性能, 使用了goroutines来处理Conn的读写事件, 这样每个请求都能保持独立,相互不会阻塞,可以高效的响应网络事件。这是Go高效的保证。

Go在等待客户端请求里面是这样写的:

c, err := srv.newConn(rw)
if err != nil {
    continue
}
go c.serve()

这里我们可以看到客户端的每次请求都会创建一个Conn,这个Conn里面保存了该次请求的信息,然后再传递到对应的handler,该handler中便可以读取到相应的header信息,这样保证了每个请求的独立性。


ServeMux的自定义

我们前面讲述conn.server的时候,其实内部是调用了http包默认的路由器,通过路由器把本次请求的信息传递到了后端的处理函数。那么这个路由器是怎么实现的呢?

它的结构如下:

type ServeMux struct {
    mu sync.RWMutex   //锁,由于请求涉及到并发处理,因此这里需要一个锁机制
    m  map[string
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值