文章目录
- 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
目录
- 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
以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。
您可能感兴趣的文章:
- Go语言网站使用异步编程和Goroutine提高Web的性能
- golang gin 框架 异步同步 goroutine 并发操作
- Go语言有状态goroutine的具体使用
- Golang中获取goroutine的ID的示例代码
- Go语言基于Goroutine的超时控制方案设计与实践
- Go 控制协程(goroutine)的并发数量
- Go 并发编程Goroutine的实现示例
- Go语言如何获取goroutine的id