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