畅远数码|万字手撕Go http源码server.go( 七 )
鉴于本文篇幅太小 , 有机会再分析一下server.go中server.Serve()函数
路由查找过程如何保证确保访问''/path/subpath'的时候是先匹配'/path/subpath'而不是匹配'/path/'' , 是因为在路由查找过程中的查找规则(之前同样提到过):
mux.ServerHTTP() -> mux.Handler() -> mux.handler() -> mux.match()
得到了处理请求的handler , 再调用h.ServeHTTP(w, r) , 去执行相应的handler方法:
type HandlerFunc func(ResponseWriter, *Request)// ServeHTTP calls f(w, r).func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {f(w, r)}复制代码f(w,r)就实现了handler的执行
设计思想mu读写锁:请求设计并发处理 , 到底哪些地方用到了并发?
没时间写了
hasPrefix() 可以做到精准匹配么?
可以 , 但没必要 。 因为需要对于模糊路由进行匹配 , 如果实现上只有路由表m , 则对于访问URL的人来说极不友好 , 无法做到有效的辅助提示
为什么需要单独维护一个后缀为/的数组es?
1.同上 , 为了模糊匹配
2.最重要的是 , 方便插入排序 , 尽管时间复杂度没有那么乐观
总结本文仅仅只是对http原生库的一小部分进行了解读 , 对于生产来说其实并没有特别大的帮助 , 但是掌握原生库的一些设计思想和设计模式对于理解其他框架是一定有很大帮助的 , 毕竟原生库的作者都是真正的大神 。
很多舍本逐末的程序员只注重框架的学习而不注重这种基础 , 那和培训班出来的又有什么区别呢?还是应该真正理解一下原生库 , 毕竟后人开发的第三方还是借鉴了这些设计哲学的 。
未来展望一因为原生库自带的默认多路请求路由器功能有限 , 而催生了很多路由框架 , 例如比较有名的框架httprouter , 这篇文章比较详细的讲解了httprouter框架 , 感兴趣的可以先看看和原生库有什么不同 , 未来如果有时间 , 也会更新对这些框架的学习 。
对于目前已经存在的web路由框架 , 已经有人比较过这些框架的优劣了 , 看这篇文章可以提前预习一下:
超全的Go Http路由框架性能比较
二很早就想系统的讲解一下智能爬虫和爬虫框架了 , 因为爬虫和http这个库关系非常大 。 基本上star较多的框架我也都多多少少使用过 , 部分源码也阅读过 , 当然因为框架本身的复杂性 , 手撕源码会更加困难和耗费时间 。 之前也陆陆续续的简单介绍过colly等常用爬虫框架 , 未来会更新更多的关于爬虫框架的源码解读 。 爬虫本身的技术含量并不高 , 但是理解这个框架为什么好、哪里好 , 这个技术含量就高很多了 , 毕竟还是要和其他爬虫框架对比一下才知道各自的优劣 。
但是受限于每个开发者自身的水平 , 这些框架或多或少都有这那的问题 , 它们并没有github主页上宣传的那么“万能” , 所以在这种比较底层的地方 , 掌握和使用的区别就很大了 , 大多数人只会使用而没有掌握 。
当然如果熟悉http库你就会发现 , 使用原生函数来写爬虫一样非常流畅 。
我坚持认为:爬虫使用框架是最后的妥协 。
三Go的有些设计哲学很有趣 , 不是简简单单几万字的篇幅就可以讲明白的
我不想把自己标榜成Go布道者或者卷入语言圣战 , Gopher应当是有趣的地鼠:
作者:Wzy_CC链接:
推荐阅读
- 英雄科技聊数码|蔡崇信有实力买下篮网,那身价3200亿的马云,能买下几支NBA球队
- 搜狐新闻|准大学生数码三件套如何选?这些元气好物值得种草
- 数码鲜蜂|三星大秀肌肉!这个透明手机如何?
- 数码科技大爆炸|台积电断供华为芯片开启倒计时!已不足10天:华为多位高管表态
- 海外网|菅义伟计划对厚生劳动省进行改革 创设"数码厅"
- 数码实验室|《飞速骑行4》2021年推出PS5和XboxSeriesX版
- 老实人数码|取代苹果XR系列,不支持5G网络,iPhone12s真机疑似被曝光
- 畅远数码|马云曾提出的4大预言,已经实现3个,网友:最后一个才是关键
- 神说要唱歌|数码宝贝大冒号14话解读 虫王对决 偷学战斗龙卷风的超比多兽
- 畅远数码|欧洲大量5G基站被烧毁!原因让人啼笑皆非
