原文链接:
https://www.ahaoaha.top/2019/05/09/Golang中协程的使用/
本文相关demo,请点击此处
协程与函数返回值
golang中的协程是由Go routime进行管理的,如果函数有返回值,则这个函数的返回值会被丢弃。
Golang协程的创建
使用go FUNC_NAME(PARAMETER_LIIST)
可以很简单的创建出一个协程来执行相应的操作
Golang协程的管理
同步
sync.WaitGroup
用来设置计数器等待线程完成之后再继续进行主执行流
func (wg *WaitGroup) Add(delta int)
:设置一个计数器,delta表明该计数器用来管理的协程的数量,计数器的设置应该位于主执行流中func (wg *WaitGroup) Done()
:对计数器进行–操作,该操作应该位于协程自身的执行流的末尾func (wg *WaitGroup) Wait()
:等待计数器所管理的协程的执行完毕,也就是在等待计数器的值变为0,如果计数器的值不为0,则主执行流会阻塞在此处
计数器变为负数的情况:会在运行时panic,panic的位置发生在sync包
sync.Once
用来控制函数只能被调用一次
func (o *Once) Do(f func())
:保证f函数只被执行一次
可以看出,f函数通常是一个没有参数和返回值的函数
原理
type