Go cond 源码学习

2019-08-02
阅读 4 分钟
3.7k
cond是go语言sync提供的条件变量,通过cond可以让一系列的goroutine在触发某个条件时才被唤醒。每一个cond结构体都包含一个锁L。cond提供了三个方法:

Go WaitGroup 源码分析

2019-08-02
阅读 3 分钟
2k
go语言sync库中的WaitGroup是用于等待一个协程或者一组携程。使用Add函数增加计数器,使用Done函数减少计数器。当使用Wait函数等待计数器归零之后则唤醒主携程。需要注意的是:

Go RWMutex 源码学习

2019-08-01
阅读 4 分钟
2k
上一篇文章我们看go了互斥锁的具体实现。但是如果业务逻辑是读多写少,如果每次读写都使用互斥锁那么整个效率就会变得很低。其实如果只是读的话并不需要互斥锁来锁住数据。只有写操作的时候需要互斥锁,但是如果有人读那么写操作也应该被锁住。在Go语言中提供了读写锁:RWMutex,并且提供了4个方法 读锁、读解锁、写锁、...

Go Mutex 源码学习

2019-07-31
阅读 6 分钟
2.5k
互斥锁是并发程序中对共享资源进行访问控制的主要手段,Mutex是go语言提供的简单易用的互斥锁。Mutex的结构很简单,暴露的方法也只有2个,一个加锁 一个解锁。那么我们每天用的Mutex互斥锁是如何实现的呢?其实使用的是go语言automic包中的院子操作,具体如何使用可以参考之前写的文章。在Mutex中的state是状态码,在mut...

Go Redigo 源码分析(一) 实现Protocol协议请求redis

2019-05-24
阅读 5 分钟
3.1k
Redis是我们日常开发中使用的最常见的一种Nosql,是一个key-value存储系统,但是redis不止支持key-value,还自持很多存储类型包括字符串、链表、集合、有序集合和哈希。在go使用redis中有很多的开源库可以使用,我经常使用的是redigo这个库,它封装很多对redis的api、网络链接和连接池。分析Redigo之前我觉得需要知道如果...

Go Jwt使用和源码学习

2019-05-17
阅读 8 分钟
5.8k
JWT(JSON Web Token)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。一个JWT由3个部分组成:头部(header)、载荷(payload)、签名(signature)。这三个部分又是由一个分隔符“.” 分割开的。

Go Gin源码学习(五) 基数树自我实现

2019-05-14
阅读 3 分钟
2.7k
经过上一篇的学习笔记,我们已经知道了Gin router的主要流程。但是我们看到代码和方法体总体很长,其中大部分是参数路由的判断。这些零散的小逻辑,让我们阅读源码的时候更难理解了一些。但是其实基数树的逻辑兵没有这么的复杂,所以我们还是按照老规矩,自己实现以下这个简单的基数树值包含主流程。代码如下:

Go Gin源码学习(四) 路由基数树

2019-05-11
阅读 15 分钟
6.4k
这次学习的是Gin中的路由,在学习源码一种我们看到了Gin的路由是它的特色。然而基础数据使用了基数树也提供了性能的保障。因为路由这部分比较独立而且逻辑相对复杂,所以需要单独学习。首先我们需要了解的是基数树,百度百科中的解释其中有一个图可以让我们更加直观的看到数据是如何存储的。基数树,相当于是一种前缀树...

Go Gin源码学习(三) 参数解析

2019-05-09
阅读 5 分钟
4.6k
其中从url中获取 从get参数中获取 从post拿数据相信我们都可以想象的到,基本就是从request中的url或者body中获取数据然后返回但是其中的数据绑定我自己开始是很疑惑的,到底是怎么实现的。疑惑的是如果object中我客户端少输入了参数 或者多输入的参数会是怎么样。举个例子:

Go Gin源码学习(二) 主流程模拟

2019-05-08
阅读 5 分钟
1.9k
上一篇学习了Gin框架的总体流程,但是自己查看源代码中被许多的零散小功能影响了主体流程的研究。所以觉得可以模仿Gin框架,自己写一个最简单仅仅含有主流程的demo。可以让我们更加深入了解Gin自己也可以再模仿的过程中更加了解源码。

Go Gin源码学习(一) 主流程

2019-05-07
阅读 7 分钟
5.1k
Gin的基本使用 Gin是一个比较轻量级的http框架,主要是提供了几个便于使用的功能: 简单的中间件注册,可以很方便的实现通用中间件的使用注册 提供了比较方便和全面的路由注册,方便的实现RESTful接口的实现 提供了便捷的获取参数的方法,包括get、post兵可以可以把数据直接转换成对象 对路由的分组,Gin可以对一组路由...