Golang源码
思维的深度
这个作者很懒,什么都没留下…
展开
-
Golang限流器rate包源码详细分析
源码地址:golang.org/x/time/raterate包是Google基于令牌桶的算法实现的限流器,可以在服务的限流中使用。一、数据结构1.常量变量//定义某个时间的最大频率//表示每秒的事件数type Limit float64//Inf表示无速率限制const Inf = Limit(math.MaxFloat64)2. 结构体Limiter结构体type Limiter struct { limit Limit //每秒允许处理的事件数量,即每秒原创 2020-11-27 18:32:35 · 1222 阅读 · 0 评论 -
Golang io/ioutil包源码分析
io/ioutil包Golang JDK 1.10.3/ readAll reads from r until an error or EOF and returns the data it read// from the internal buffer allocated with a specified capacity.func readAll(r io.Reader, capacity int64) (b []byte, err error) { var buf bytes.原创 2020-08-08 18:02:57 · 439 阅读 · 0 评论 -
Golang context包源码分析
context源码分析Golang JDK 1.10.3Context介绍 假如有多个goroutine来处理一个操作,这个操作有超时时间,当超时时间到了之后,如何通知这个操作的所有goroutine都退出。或者在操作的过程中有一个goroutine遇到异常需要退出,如何通知其他的goroutine也退出该操作? context就可以很好的解决以上问题。 Go服务器的每个请求都有自己的goroutine,而有的请求为了提高性能,会经常启动额外的goroutine处理请...原创 2020-08-08 17:55:04 · 401 阅读 · 0 评论 -
Golang bytes包Buffer源码分析
bytes/buffer.goBuffer提供了一个可扩展的字节缓冲区,底层是对[]byte进行封装,提供读写的功能。结构体type Buffer struct { buf []byte // contents are the bytes buf[off : len(buf)] 缓冲区 off int // read at &buf[off], write at &buf[len(buf)] 读写的索引值,指针偏移量.原创 2020-08-08 17:39:55 · 737 阅读 · 0 评论 -
Golang bytes源码分析
bytes/bytes.go源码分析Golang JDK 1.10.3bytes包提供了操作[]byte的常用方法。源码分析func equalPortable(a, b []byte) bool { if len(a) != len(b) { return false } for i, c := range a { if c != b[i] { return false } } return true}equalPortable函数是内部函数,用于.原创 2020-08-08 17:23:24 · 353 阅读 · 0 评论 -
Golang bufio包Scanner源码
Go jdk版本1.10.3 Scanner源码在bufio包中的scan.go文件中一、Scanner介绍 Scanner提供一个按指定规则来读取数据的缓冲区IO,比如通过”行匹配函数”来逐行读取数据,Scanner通过Scan方法来按”匹配函数”读取数。 Scan方法会通过一个“匹配函数”读取数据中符合要求的部分,跳过不符合要求的部分。 “匹配函数”由调用者指定。本包中提供的匹配函数有"行匹配函数"、"字节匹配函数"、"字符匹配函数"、"单词匹配函...原创 2020-08-08 16:55:32 · 988 阅读 · 0 评论 -
Golang bufio包源码分析
go 源码1.10.3 bufio.go一、bufio介绍bufio实现了带缓冲的IO功能,它是在io.Reader和io.Writer接口对象上提供了进一步的封装,从而提供了更加丰富的操作方法。bufio包主要二、bufio.Reader1.结构体type Reader struct { buf []byte //缓冲区的数据 rd io.Reader // 底层的io.Reader r, w int ...原创 2020-08-08 16:42:13 · 570 阅读 · 0 评论 -
Golang日志框架lumberjack包源码分析
github地址: https://github.com/natefinch/lumberjack获取源码go get gopkg.in/natefinch/lumberjack.v2介绍 lumberjack用于记录日志,但是它可以控制每个日志文件的大小,以及可以按规则删除历史的日志文件,甚至可以对历史的日志文件进行压缩. Logger会首先打开或创建logFile文件,如果logFile文件已存在并且该文件的大小没有超过设置的MaxSize,就会...原创 2020-07-05 18:38:23 · 3142 阅读 · 0 评论 -
Golang sync.WaitGroup源码详细分析
一、介绍WaitGroup是多个goroutine之间协作的一种实现方式,主要功能就是阻塞等待一组goroutine执行完成。常用的使用场景:主goroutine调用Add函数设置需要等待的goroutine的数量,当每个goroutine执行完成后调用Done函数(将counter减1),Wait函数用于阻塞等待直到该组中的所有goroutine都执行完成。源码中主要设计到的三个概念:counter、waiter和semaphorecounter: 当前还未执行结束的gorou..原创 2020-07-02 18:36:56 · 911 阅读 · 0 评论