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
pig
Process finished with the exit code 0
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。