作为一名 Gopher,我们很容易形成一个编程惯例:每当有一个实现了 io.Closer 接口的对象 x 时,在得到对象并检查错误之后,会立即使...
Go 语言通过 go 关键字开启 goroutine 让开发者可以轻松地实现并发编程,而并发程序的有效运行,往往离不开 sync 包的保驾护航。...
Go语言提供的协程goroutine可以让我们很容易地写出多线程程序,但是,如何让这些并发执行的goroutine得到有效地控制,这是我们需要探...
本文旨在探讨Go函数中的一个问题:为什么Go函数能支持多参数返回,而C/C++、java不行?这其实牵涉到了一个叫做函数调用惯例的问题。 调用惯...
单元测试 如果把开发程序比作盖房子,那么我们必须确保所有的用料都是合格的,否则盖起来的房子就会存在问题。对于程序而言,我们可以将盖房子的砖头、钢...
在《切片传递的隐藏危机》一文中,小菜刀有简单地提及到切片扩容的问题。在读者讨论群中,有人举了以下例子,想得到一个合理的回答。 为什么结果不是5,...
在《Go精妙的互斥锁设计》一文中,我们详细地讲解了互斥锁的实现原理。互斥锁为了避免竞争条件,它只允许一个线程进入代码临界区,而由于锁竞争的存在,...
Some people, when confronted with a problem, think, “I know, I’ll use th...
Go是一门以并发编程见长的语言,它提供了一系列的同步原语方便开发者使用,例如sync包下的Mutex、RWMutex、WaitGroup、Onc...