goroutine

【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

    推荐阅读