main函数中如何等待协程运行完毕

使用channel同步

package main
import (
    "fmt"
)

func printNumber(num int, c chan struct{}) {
  fmt.Println(num)
  c <- struct{}{}
}

func main() {
  sign := make(chan struct{}, 10)
  for i:=0;i<10;i++ {
    go printNumber(i, sign)
  }
  for i:=0;i<10;i++{
    <-sign
  }
  fmt.Println("Done.")
}

使用sync.WaitGroup

package main
import (
    "fmt"
    "sync"
)

func printNumber(num int, callback func()) {
  fmt.Println(num)
  callback()
}

func main() {
  var wg sync.WaitGroup
  wg.Add(10)
  for i:=0;i<10;i++ {
    go printNumber(i, wg.Done)
  }
  wg.Wait()
  fmt.Println("Done.")
}
posted @   yihailin  阅读(563)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
点击右上角即可分享
微信分享提示