goroutine 是什么

  • goroutine 是 Go 中并发执行逻辑的一种方式

goroutine 怎么用

场景一: 主进程中,并发执行两段逻辑

  • 使用 go 关键字,可以并发执行两个函数

  • 需要使用 sync.WaitGroup,使主进程等待 goroutine 执行完毕

  • 如下代码展示了,主进程中执行两个 goroutine 的情形,其中第一个 goroutine 使用 chan 捕获退出信号(优雅退出)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    package main

    import (
    "fmt"
    "os"
    "os/signal"
    "sync"
    "syscall"
    )

    func main() {
    var wg sync.WaitGroup
    wg.Add(1)
    go func() {
    defer wg.Done()
    fmt.Println("first function start...")
    quit := make(chan os.Signal, 1)
    signal.Notify(quit, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
    sig := <-quit
    fmt.Println(sig)
    // ctxWeb := web.Shutdown()
    // <-ctxWeb.Done()
    fmt.Println("first function end...")
    }()
    wg.Add(1)
    go func() {
    defer wg.Done()
    fmt.Println("second function start...")
    fmt.Println("second function end...")
    }()
    wg.Wait()
    }