【goroutine】go语言中每一个并发执行的活动称为goroutine,当一个程序启动时,只有一个goroutine来调用main函数,称它为主goroutine
。
需要注意的是当main函数执行完毕后,所有的goroutine都暴力地被终结了
,然后程序退出
下面介绍如何创建并使用goroutine
创建
语法上,直接在普通函数或方法上加上go关键词
f()// 调用f()函数,等它返回后,再执行接下来的语句
go f()// 新建一个调用f()的goroutine,不用等待它返回即可执行接下来的语句
实例 下面通过几个例子理解goroutine
例1:
func main(){
go count("sheep")
go count("dog")
}func count(animal string){
for {
fmt.Println(animal)
}
}
输出
# 没有输出任何东西,直接结束。因为主协程(main函数)执行完毕了,直接暴力终结子协程
Process finished with the exit code 0
因此我们需要在main函数执行结束前,
阻塞等待子协程执行完毕
再结束main函数,官方提供给我们方法来设置阻塞,如例2例2:
func main(){
var wg sync.WaitGroup
wg.Add(1)// 协程数go func() {
count("pig")
wg.Done()// 执行Done后,delta设置为-1
}()wg.Wait()
}func count(animal string){
for i := 0;
i < 5;
i++ {
fmt.Println(animal)
}
}
输出
pig
pig
pig
pig
pigProcess finished with the exit code 0