go语言之go(goroutine)控制异步详解

作者:

文章目录
  • Go 语言是一种并发编程语言,在 Go 里有一个非常重要的关键字 go(goroutine),一般我们可以用它做一些异步,并发的任务。 goroutine 用来调用函数,当某个函数被 go 关键字调用后,go 就会创建一个类似协程的东西,来执行这个函数,这样可以轻易的实现并发。
  • 以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。 您可能感兴趣的文章: Go语言网站使用异步编程和Goroutine提高Web的性能 golang gin 框架 异步同步 goroutine 并发操作 Go语言有状态goroutine的具体使用 Golang中获取goroutine的ID的示例代码 Go语言基于Goroutine的超时控制方案设计与实践 Go 控制协程(goroutine)的并发数量 Go 并发编程Goroutine的实现示例 Go语言如何获取goroutine的id
  • 目录
    • 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

      站内搜索