go语言之go(goroutine)控制异步详解
作者:你是我的幸运儿
Go语言通过goroutine实现并发,允许异步执行函数,但单独使用会引发顺序问题,需结合WaitGroup确保主线程等待所有并发任务完成后再输出结果,从而正确同步执行流程
go(goroutine)控制异步
Go 语言是一种并发编程语言,在 Go 里有一个非常重要的关键字 go(goroutine),一般我们可以用它做一些异步,并发的任务。
goroutine 用来调用函数,当某个函数被 go 关键字调用后,go 就会创建一个类似协程的东西,来执行这个函数,这样可以轻易的实现并发。
示例
package main import ( "fmt" ) func main() { go work1() go work2() fmt.Println("[全部完成]") } func work1(){ fmt.Println("work1") } func work2(){ fmt.Println("work2") }
结果
[全部完成]
当然这是一个不恰当的示例,但这也证明了异步执行,在调用work1,work2之后不等输出结果,就继续执行了。
要想等异步执行完之后,再执行最后的输出,需要加入WaitGroup
正确示例
package main import ( "fmt" "sync" ) var waitGroup sync.WaitGroup func main() { waitGroup.Add(2) go work1() go work2() waitGroup.Wait() fmt.Println("[全部完成]") } func work1(){ fmt.Println("work1") waitGroup.Done() } func work2(){ fmt.Println("work2") waitGroup.Done() }
结果:
work2 work1 [全部完成]
WaitGroup详解,见:https://www.jb51.net/jiaoben/34632015w.htm
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。