包含标签 golang 的文章

用Go写了一个编程语言

前两个月莫名的对编译原理产生了浓厚的兴趣,刷完相关理论知识后,于是迫不及待地动手用Go写了个脚本语言gscript,麻雀虽小但五脏俱全,目前已经支持现代编程语言的大部分特性,这篇博客记录下实践过程中碰到的难点以及解决思路。

阅读全文

一个系列彻底搞懂map(终):并发安全map

并发安全的map在日常开发中使用极为频繁,单纯通过map与sync.RWLock结合并给整个map上粗粒度锁的方式效率并不高。在go1.9中引入sync.Map,通过快慢路径的方式提升并发读性能,除此之外还可以用大锁打为小锁的方式减少并发冲突,获得更优的性能表现。

阅读全文

一个系列彻底搞懂map(二):红黑树实现

上文讲到了利用哈希结构实现map,除此之外还可以用红黑树实现。相较于hash结构的实现,红黑树实现虽然查找删除的时间复杂度由O(1)退化为O(logN),但却拥有更优的空间效率,同时还提供了对key排序的功能,因此广泛应用于数据库存储领域。

阅读全文

手撕数据结构——平衡二叉树

二叉搜索树提供了平均效率为O(logN)级别的查找、删除、插入操作,但在极端情况下可能导致二叉树退化为单链表。平衡二叉树作为二叉搜索树的一种,通过平衡约束保证左右子树高度相近,能够保证更稳定的性能。本文就从原理出发,最终实现一个操作完备的平衡二叉树。

阅读全文

一个系列彻底搞懂map(一):hash表

map映射结构频繁地运用在日常的开发之中,因此成为了面试中的高频考点,本系列将从map的两种实现(hash以及红黑树)出发,再详解go语言的map,最后讨论如何实现高性能的并发安全map,彻底搞懂map结构的奥秘。

阅读全文

go语言从0实现net/http标准库(六):response

以框架目前的完成度来说,handler中还需要我们手动的构建http响应报文,不仅麻烦而且容易出错。因此我们今天就要完成对response的封装,提供更易操作的api以及完成对响应报文的自动构建。本文难度较高,是该系列的最后一个难点。

阅读全文

go语言从0实现net/http标准库(四):multipart表单

前文对Body进行了设置,不论客户端是使用Content-Type还是chunk编码的方式,服务端都能够正确的解析。本文将在Body功能的基础上,着重完成form表单中的multipart表单的解析。个人认为是整个框架最难实现部分,不过与chunkReader实现的思路类似,可以借鉴实现。

阅读全文