防止main()函数在Golang中的goroutine完成之前终止

防止main()函数在Golang中的goroutine完成之前终止,第1张

防止main()函数在Golang中的goroutine完成之前终止

最简单,最干净和“可扩展”的方法是使用

sync.WaitGroup

var wg = &sync.WaitGroup{}func printElo() {    defer wg.Done()    fmt.Printf("Elon")}func printHello() {    defer wg.Done()    fmt.Printf("Hellon")}func main() {    fmt.Printf("This will print.")    i := 0    for i < 10 {        wg.Add(1)        go printElo()        wg.Add(1)        go printHello()        i++    }    wg.Wait()}

输出(在Go Playground上尝试):

This will print.HelloEloHelloEloHelloEloHelloEloHelloEloHelloEloHelloEloHelloEloHelloEloHelloElo

执行以下 *** 作时要遵循的简单“规则”

sync.WaitGroup

  • WaitGroup.Add()
    go
    语句之前调用“原始” goroutine(开始一个新的)
  • 建议调用
    WaitGroup.Done()
    延迟,因此即使goroutine恐慌也可以调用
  • 如果要传递
    WaitGroup
    给其他函数(而不使用全局变量),则必须传递一个指向它的指针,否则
    WaitGroup
    将复制(它是一个结构),并且
    Done()
    在复制时将不会观察到该方法原本的


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5016013.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-14
下一篇2022-11-14

发表评论

登录后才能评论

评论列表(0条)

    保存