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 语言是一种并发编程语言,在 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

    站内搜索