Golang package sync 剖析(三):sync.Cond

2020-02-01
阅读 5 分钟
4.3k
上一期中,我们介绍了如何使用 sync.WaitGroup 提高程序的并行度。本期文章我们介绍 package sync 下的另一个工具类:sync.Cond。

Golang package sync 剖析(二): sync.WaitGroup

2020-01-28
阅读 6 分钟
3.7k
上一期中,我们介绍了 sync.Once 如何保障 exactly once 语义,本期文章我们介绍 package sync 下的另一个工具类:sync.WaitGroup。

Golang package sync 剖析(一): sync.Once

2020-01-27
阅读 3 分钟
6.6k
Go语言在设计上对同步(Synchronization,数据同步和线程同步)提供大量的支持,比如 goroutine和channel同步原语,库层面有

我为什么离开Grab加入字节跳动

2019-03-16
阅读 4 分钟
23.5k
8102年的那个冬天,北京的天气有两种:一寸雾霾携着一抹温暖,阵阵寒流带着万缕阳光。每逢这样的天气里,我时常会想起赤道上那个永远在27°-31°之间的城市:新加坡。想起那里潮湿温热的空气,那里几乎永远浅蓝色飘着白云的天空,和那个每周五有个妹子唱华语歌的小酒吧。在最低温度-13°的那个晚上,下班的我走在寒风中,甚...

使用testify和mockery库简化单元测试

2018-11-04
阅读 7 分钟
18.7k
2016年我写过一篇关于Go语言单元测试的文章,简单介绍了 testing 库的使用方法。后来发现 testify/require 和 testify/assert 可以大大简化单元测试的写法,完全可以替代 t.Fatalf 和 t.Errorf,而且代码实现更为简短、优雅。

用Go写算法:求最小可用自然数

2018-10-13
阅读 4 分钟
3k
前一段时间在 reddit 上看到有人推广一篇名为 GopherCon 2018 - Demystifying Binary Search Tree Algorithms 的博客,博客中列举了传统大学里学习算法的种种弊端,并强调了用 Go 实现算法是多么简单有趣,然后拿二叉树举了个例子。读完这篇博客以后,我不得不说,真心没看出来 Go 写算法的优势在哪里。但是,配图确实萌...

Go语言单元测试

2016-12-29
阅读 6 分钟
12.3k
Go 语言在设计之初就考虑到了代码的可测试性。一方面 Go 本身提供了 testing 库,使用方法很简单;另一方面 go 的 package 提供了很多编译选项,代码和业务逻辑代码很容易解耦,可读性比较强(不妨对比一下C++测试框架)。 本文中,我们讨论的重点是 Go 语言中的单元测试,而且只讨论一些基本的测试方法,包括下面几个方面:

Go语言并发模型:使用 select

2016-09-05
阅读 4 分钟
44.7k
作为一种现代语言,go语言实现了对并发的原生支持。上几期文章中,我们对goroutine 和 channel进行了详细的讲解。但是要实现对 channel 的控制,从语言层面上来说,select 语句是必不可少的部分。本文中,我们就 select 语句的行为和使用方法进行深入讨论。

Go语言并发模型:使用 context

2016-08-29
阅读 9 分钟
48.2k
在 Go http包的Server中,每一个请求在都有一个对应的 goroutine 去处理。请求处理函数通常会启动额外的 goroutine 用来访问后端服务,比如数据库和RPC服务。用来处理一个请求的 goroutine 通常需要访问一些与请求特定的数据,比如终端用户的身份认证信息、验证相关的token、请求的截止时间。 当一个请求被取消或超时时...

Go语言并发模型:以并行处理MD5为例

2016-08-21
阅读 6 分钟
10.3k
Go语言的并发原语允许开发者以类似于 Unix Pipe 的方式构建数据流水线 (data pipelines),数据流水线能够高效地利用 I/O和多核 CPU 的优势。

Go语言并发模型:像Unix Pipe那样使用channel

2016-08-13
阅读 8 分钟
26.5k
Go语言的并发原语允许开发者以类似于 Unix Pipe 的方式构建数据流水线 (data pipelines),数据流水线能够高效地利用 I/O和多核 CPU 的优势。

Go 语言反射三定律

2016-08-06
阅读 8 分钟
21.4k
本文中,我们将解释Go语言中反射的运作机制。每个编程语言的反射模型不大相同,很多语言索性就不支持反射(C、C++)。由于本文是介绍Go语言的,所以当我们谈到“反射”时,默认为是Go语言中的反射。