Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。

    因而一直想的是自己可以根据自己学习和使用Go语言编程的心得,写一本Go的书可以帮助想要学习Go语言的初学者快速入门开发和使用!

    Sync.WaitGroup解析

    Golang中的同步可以通过Sync.WaitGroup来实现的.WaitGroup的功能,它实现了一个类似队列的结构,可以一直向队列中添加任务,当任务完成后便从队列中删除,如果队列中的任务没有完全完成,可以通过Wait()函数来出发阻塞,防止程序继续进行,直到所有的队列任务都完成为止.

    Sync.WaitGroup中有3个方法,Add(),Done(),Wait()。其中Done()是Add(-1)的别名。

    Sync.WaitGroup中三个方法的作用是:

    这里需要注意下,Sync中的Add()方法和Done方法,官方的文档也有说明这个,The main goroutine calls Add to set the number of goroutines to wait for. Then each of the goroutines runs and calls Done when finished.即在运行main函数的goroutine里运行Add()方法,在其他的goroutine里面运行Done()函数。

    Done()方法将WaitGroup计数器减1。

    Wait()直到WaitGroup计数器为零。

    应用示例:

    这个应用示例很简单,是将每次循环的数量过3秒钟输出。那么,这个程序如果不用WaitGroup,那么将看不见输出结果。因为Goroutine还没执行完,主线程已经执行完毕。注释的defer wg.Done()和defer wg.Add(-1)作用一样。