栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

防止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()
    在复制时将不会观察到该方法原本的


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/406423.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号