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

zero
6 声望0 粉丝

« 上一篇
channel