公众号文章链接:https://mp.weixin.qq.com/s/KogOt-hd6KvXljwYwK7aQg

csdn博客链接:http://blog.csdn.net/screscent/article/details/79636700

Gorilla是一个go语言的web工具箱,包含了很多的模块。本文分析的模块gorilla/context: stores global request variables.

源码结构如下

源码很简单,只有一个go文件

直接进入源码文件github.com/gorilla/context/context.go

最重要的就是这三个变量了。

Mutex:是读写锁,用于并发安全

Data:是最关键的数据结构,用于存储requestvariable。是一个map的map

Datat:是一个用于存储时间的。主要用于判断过期用。

Set函数:

data是一个map的map,可以分解为两层。

如果type tmp map[interface{}]interface{}   这个用于存储key val

其实data可以看做为map[*http.Request]tmp

那么Set源码中,可以看到,先判断第一层的http Request存不存在,如果不存在,则构建一个key为当前Request的map。然后将key val放入到这个map中。

同记录下了Request的创建时间。

Get函数:

先查找 Request,查找到Request的map后,再查找对于key的val,返回。

逻辑很清晰简单

GetOk、GetAll和GetAllOk就不说了,代码挺简单的。

接着是Delete、Clear。

这里要注意的是,Delete只删除了data中的数据,并没有删除datat存储的时间数据。

Clear则是将data、datat中数据全部清除。

所以建议不要用Delete,用Clear,否则容易出现泄漏。

Purge函数:清除过期数据

当传入参数<0时,则将所有数据全部清除。否则只清除过期数据

ClearHandler函数:用于对httphandler做一层包装,主要用于自动Clear context数据。这个用法很赞。可以防止人为忘记Clear。

龚浩华

月牙寂 道长

QQ 29185807

2018年03月21日

第一时间获取文章,可以关注本人公众号:月牙寂道长,也可以扫码关注

Gorilla源码分析之gorilla/context源码分析相关推荐

  1. Gorilla源码分析之gorilla/mux源码分析

    本文公众号文章链接:https://mp.weixin.qq.com/s/LLcPDPtpjNeXAA_ffL3YCg 本文csdn博客链接:http://blog.csdn.net/screscen ...

  2. Storm源码分析之四: Trident源码分析

    Storm源码分析之四: Trident源码分析 @(STORM)[storm] Storm源码分析之四 Trident源码分析 一概述 0小结 1简介 2关键类 1Spout的创建 2spout的消 ...

  3. .net webim 源码_Netty服务器启动过程源码带你分析「你能坚持看完吗?」

    基本说明 1.只有看过Netty源码,才能说是真正的掌握了Netty框架: 2.在io.netty.example包下,有很多netty源码案例,可以用来分析: 3.源码分析,是针对有Java项目经验 ...

  4. 【Spring源码】ClassPathResource 资源文件源码分析

    上一篇文章我们主要介绍了开发 Spring 应用涉及到的一些核心组件,在文章的最后搭建了开发环境.那么接下来我们开始分析 Spring 源码部分,本篇文章首先分析 Spring 是如何封装资源文件的. ...

  5. Postgresql源码(82)SPI模块拆解分析一:执行简单SQL获取结果

    相关 <Postgresql源码(76)执行器专用元组格式TupleTableSlot> <Postgresql源码(82)SPI模块拆解分析一:执行简单SQL获取结果> &l ...

  6. Alian解读SpringBoot 2.6.0 源码(八):启动流程分析之刷新应用上下文(中)

    目录 一.背景 1.1.刷新的整体调用流程 1.2.本文解读范围 二.调用后处理器 2.1.调用在上下文中注册为beanFactory的后置处理器 2.2.invokeBeanFactoryPostP ...

  7. Alian解读SpringBoot 2.6.0 源码(七):启动流程分析之准备应用上下文

    目录 一.背景 1.1.run方法整体流程 1.2.本文解读范围 二.准备应用上下文 2.1.整体流程 2.2.设置环境 2.3.应用上下文进行后置处理 2.4.应用所有初始化器 2.5.发布应用上下 ...

  8. Alian解读SpringBoot 2.6.0 源码(六):启动流程分析之创建应用上下文

    目录 一.背景 1.1.run方法整体流程 1.2.本文解读范围 二.创建应用上下文 2.1.初始化入口 2.2.初始化AbstractApplicationContext 2.3.初始化Generi ...

  9. Alian解读SpringBoot 2.6.0 源码(八):启动流程分析之刷新应用上下文(下)

    目录 一.背景 1.1.刷新的整体调用流程 1.2.本文解读范围 二.初始化特定上下文子类中的其他特殊bean 2.1.初始化主体资源 2.2.创建web服务 三.检查监听器bean并注册它们 四.实 ...

  10. Alian解读SpringBoot 2.6.0 源码(九):启动流程分析之应用上下文刷新后处理(启动完成事件,Runner运行器,就绪事件)

    目录 一.背景 1.1.run方法整体流程 1.2.本文解读范围 二.应用上下文刷新后置处理 三.时间信息.输出日志记录执行主类名 四.发布应用上下文启动完成事件 4.1.ApplicationSta ...

最新文章

  1. 研究Android音视频-3-在Android设备上采集音视频并使用MediaCodec编码为H.264
  2. Photoshop绘制植物大战僵尸中的食人花
  3. [BZOJ 2425] 计数
  4. Hadoop使用常见问题以及解决方法
  5. c语言程序设计7.4思考题答案,C语言程序设计习题集及答案(7)
  6. linux attach 指令,以太坊实战-attach命令详解
  7. 【LightOJ - 1123】Trail Maintenance(在线维护最小生成树,删边思维)
  8. cnn 回归 坐标 特征图_论文笔记 | CNN 是怎么学到图片绝对位置信息的
  9. Java Web学习总结(15)——JSP指令
  10. 基于php+Mysql新闻管理系统 开题报告
  11. 试简述smtp通信的三个阶段的过程_对通信技术来说,物联网起了什么样的作用?...
  12. 利用百度点击原理提升关键词排名
  13. 夜间模式 css,网页夜间模式,CSS样式
  14. System.setOut()重定向输出解释
  15. logo制作软件 Ai怎么设计创意LOGO
  16. IQ 域名被删除事件 的前因后果
  17. android 打开屏幕,Android打开屏幕
  18. 全志T507核心板4路AHD摄像头实现方案-飞凌嵌入式
  19. 旧机宝开发笔记之:RN开发编译器的选择
  20. 用pyton爬取某短租网信息

热门文章

  1. Flink实战(九十三):数据倾斜(二)keyby 窗口数据倾斜的优化
  2. 股票-集合竟价与连续竟价
  3. Mr. Ms. Mrs. Miss 的区别
  4. 自动弹窗加qq群教程
  5. 某鱼app获取Cookie(token)
  6. 关于手机联系人的中文字母排序问题
  7. 【IJCV2020】【语义编辑】Semantic Hierarchy Emerges in Deep Generative Representations for Scene Synthesis
  8. 齐振宏教授 变革领导力导师
  9. Android ToolBar and Listview
  10. 第一章 TCP/IP 协议