Golang的WaitGroup陷阱

2018-11-16
阅读 2 分钟
9.2k
sync.WaitGroup是并发环境中,一个相当常用的数据结构,用来等待所有协程的结束,在写代码的时候都是按着例子的样子写的,也没用深究过它的使用。前几日想着能不能在协程中执行Add()函数,答案是不能,这里介绍下。

轻松检测Golang并发的数据竞争

2018-11-15
阅读 2 分钟
9.1k
Golang中我们使用Channel或者sync.Mutex等锁保护数据,有没有一种机制可以检测代码中的数据竞争呢? 背景知识数据竞争是并发情况下,存在多线程/协程读写相同数据的情况,必须存在至少一方写。另外,全是读的情况下是不存在数据竞争的。 使用race检测数据竞争 go build有个标记race可以帮助检测代码中的数据竞争。 {代码...

Golang定时器陷阱

2018-11-14
阅读 4 分钟
11.7k
所谓陷阱,就是它不是你认为的那样,这种认知误差可能让你的软件留下隐藏Bug。刚好Timer就有3个陷阱,我们会讲 1)Reset的陷阱和 2)通道的陷阱,3)Stop的陷阱与Reset的陷阱类似,自己探索吧。

Go的map中删除子map,内存会自动释放吗?

2018-11-14
阅读 3 分钟
5.3k
在C++中,如果使用了map包含map的数据结构,当要释放上层map的某一项时,需要手动释放对应的子map占用的内存,而在Go中,垃圾回收让内存管理变得如此简单。

轻松入门Golang pprof实用不忽悠

2018-11-12
阅读 3 分钟
6.3k
golang自带的prof包是runtime/pprof,这个是低级别的,需要你手动做一些设置等等周边工作,不利于我们快速上手,利用pprof帮助我们解决实际的问题。这里推荐davecheney封装的pprof,它可以1行代码,让你用上pprof,专心解决自己的代码问题,下载: