![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程
文章平均质量分 76
Totoro19
这个作者很懒,什么都没留下…
展开
-
golang 的 map 实现(一)
概述哈希表是工程中常用到的数据类型,能提供快速的检索和更新。复杂度一般为 O(1)本篇博文分 两部分写,第一部分是源码学习,第二部分是一些内部实现,以及觉着有意思的一些地方,以及个人思考理论哈希表需要解决的问题有两个位置索引数据碰撞索引交给 hash function 哈希算法,常用就是模运算解决碰撞主要有以下三种方式分离链接,也就是利用链表性质存储冲突...原创 2018-03-16 14:33:58 · 1594 阅读 · 3 评论 -
golang 的 map 实现(二)
如何扩容map 增长过程中,对空间的需求也在增加,那么如何完成透明扩容的同时,又不会太多影响性能,就是这里要讨论的。仅考虑空间增长,map 的扩容方式有两种,overflow 以及 hashGrowoverflow 是溢出链,是 bucket 级别的扩容,理解成链表hashGrow 则是再散列的实现。空间变大的同时,重新进行散列,不过 rehash 过程不是同步,而是被摊还到了 m...原创 2018-03-16 14:35:00 · 826 阅读 · 0 评论 -
使用空 struct 做为 channel 中的通知载体
背景使用 Golang 开发的时候,会经常使用 channel 来进行信号通知,即所传递的数据本身没有什么实际价值。实现方式之前一直使用如下方式ch := make(chan int)后来看到另外一种方式ch := make(chan struct{})两种方式的对比使用空 struct 是对内存更友好的开发方式,在 go 源代码中针对 空struc...原创 2018-05-08 11:32:04 · 1993 阅读 · 1 评论 -
context 包学习笔记
Context 是用来控制一个请求的生命周期,以及周期内数据共享的一个 package。数据层面依赖 valueCtx,是一个嵌套实现的类 map 的数据结构type valueCtx struct { Context key, val interface{}}通过 递归匹配,来读取最近的一次更新的值(考虑到一个请求周期内的数据应该不多,递归查询应该是可以...原创 2018-05-08 11:34:35 · 299 阅读 · 0 评论 -
golang tag
golang tagtag 是针对 struct field 的补充说明tag 可以是 kv 形式,也可以字符串形式(比如设置标记属性)如果只是字符串形式,就不要使用 tag.Lookup 方法了,这个是针对 kv 的。 那个 bool 的返回值是用来标识 value 是否存在,而非 key 是否存在golang 对 tag 的处理是通过字符读取,然后通过分割字符来进行分组,以及区分 ...原创 2019-07-03 17:30:24 · 213 阅读 · 0 评论