当我刚开始尝试了解Go的内存分配器时,我发现这真是一件可以令人发疯的事情,因为所有事情似乎都像一个神秘的黑盒(让我无从下手)。由于几乎所有技术魔法都隐藏在抽象之下,因此您需要逐一剥离这些抽象层才能理解它们。在这篇文章中,我们就来这么做(剥离抽象层去了解隐藏在其下面的技术魔法)。如果您想了解有关Go内存分配器的知识,那么本篇文章正适合您。 我要晨读

已有4485人晨读

截止到go1.13, go 官方推出的包管理工具go module已经发布三个版本了,网上也有很多文章介绍如何使用go module(推荐观看附录中Go夜读的视频和官方Wiki),但是大部分都是讲如何引用别人的go module模块,鲜有提到如何发布自己的go module包的文章。本文将主要介绍如何“优雅”地发布自己的go module模块。 我要晨读

已有7191人晨读

tcp/udp、ip构成了网络通信的基石,tcp/ip是面向连接的通信协议,要求建立连接时进行3次握手确保连接已被建立,关闭连接时需要4次通信来保证客户端和服务端都已经关闭,也就是我们常说的三次握手,四次挥手。在通信过程中还有保证数据不丢失,在连接不畅通时还需要进行超时重试等等。 我要晨读

已有7455人晨读

golang的bufio包里面定以的SplitFunc是一个比较重要也比较难以理解的东西,本文希望通过结合简单的实例介绍SplitFunc的工作原理以及如何实现一个自己的SplitFunc。 我要晨读

已有7116人晨读

高并发是指在同一个时间点,有很多用户同时访问URL地址,比如:淘宝的双11、双12,就会产生高并发。又如贴吧的爆吧,就是恶意的高并发请求,也就是DDOS攻击。 我要晨读

已有7136人晨读

在前面的章节中,我们介绍了两种(证书算一种)可全局认证的方法: TLS 证书认证 基于 CA 的 TLS 证书认证 Unary and Stream interceptor 我要晨读

已有6259人晨读

可以认为这是对 Rob Pike 的一篇关于 Go 字符串的博客的解释。以 Go 程序员的思维来写。 在博客文章中,他说没有什么证据可以证明 Go 字符串是以 slices 的方式实现。我猜这不是他的疏忽,但起码可以证明一点,这不是这篇博客的核心。再说,任何想要自己研究的都可以在使用 Go 代码的过程中探索。我就是这样做的。所以在这篇文章中,我尽力解释 Go 字符串实现与 slice 实现的关系。 我要晨读

已有5352人晨读

当我意识到我一直在处理和解决的问题有一个专有名词描述的时候,我总会觉得这事十分有趣。这次出现这种情况的是竞争条件(Race Conditions)。当你处理多个 routine 共享某类资源的时候,不可避免的需要考虑到这个。如果你未曾在你的代码中考虑过这个问题,现在就是一个不错的时候。 我要晨读

已有6205人晨读

我最近在用 Hadoop 和 Spark 为一个我帮助教学的班级工作。PySpark 的确很棒,但是 Hadoop MapReduce 我从来没有真正关注,直到我发现 mrjob。MapReduce 的观念是极为强大的,但是大量的样板文件需要用 Java 编写,甚至是一个简单的 Hadoop 作业,在我看来那是不必要的。 我要晨读

已有5790人晨读

在某个数据需要被多个线程共享访问的时候,会出现读者-写者问题(这里的「问题」是复数形式的,因为读者-写者问题有多个变种)。访问共享数据的线程有两种类型:读者和写者。读者只会读取数据,而写者则是修改它。当写者拥有了访问数据的权限后,其它的线程(不管是读者还是写者)都不能访问这个数据。这种约束的需求在现实中是存在的,比如:当写者不能原子性地修改某个数据(例如数据库)时,在修改完成之前,要读取这个数据的读者要被阻塞,以免读者获取到损坏的数据(脏数据)。对于读者-写者问题的核心,还有很多修订的限制, 我要晨读

已有6311人晨读

在分布式系统中,超时是基本可靠性概念之一。就像这条 tweet 中提到的,它可以缓和分布式系统中不可避免出现的失败所带来的影响 我要晨读

已有8693人晨读

即将发布的 Go 语言 1.11 版本将会给我们带来对 modules(模块)的实验性支持,这是 Go 语言新的一套依赖管理系统。 (译注:很多编程语言中,把 modules 译作「模块」,但由于目前该机制在 Go 语言还没正式发布,因此尚未有非常普及的译法。而类似的 vendor 一词的翻译,大多中文文章都是采取保留英文原文的方式处理,因此本文对 modules 的翻译参考 vendor 的处理:保留英文原文) 我要晨读

已有5730人晨读

考虑到绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知。 所以我斗胆以 Redis 为题材,对 Redis 常见问题做一个总结,希望能够弥补大家的知识盲点。 我要晨读

已有5979人晨读

Hello everyone: 过去3个月我们一直在Loom网路上开发专门用于ERC721通证的一款Plasma Cash实现。有鉴于ERC721通证本身是独特不可替代的,因此该实现并不存在通证拆分或合并的问题。 我要晨读

已有5456人晨读

对LevelDB比较了解应该知道其中一块cache实现:LRU Cache是采用双向链表 + HashTable,其中HashTable是为了解决双向链表的查找性能缺陷才引入的。接下来看一下采用golang如何实现LRU Cache。 我要晨读

已有5306人晨读

软件架构 软件架构是在软件的内部,经过综合各种因素的考量、权衡,选择特定的技术,将系统划分成不同的部分并使这些部分相互分工,彼此协作,为用户提供需要的价值。 我要晨读

已有5279人晨读

毕竟,如果我们去除信任另一方将会执行的需要,那么做事情的效率究竟会提高多少呢? 究竟什么是智能合约呢?这难道不是以太坊的范畴吗?这难道不是未来要走的道路吗?你为什么要阻挠进步呢? 在本文中,我将阐述什么是智能合约以及与之相关的工程实践(提示:这不那么简单,很难保证)。 我要晨读

已有4872人晨读