使用 sync 包中的 WaitGroup 对象,对协程量计数,通过标记协程完成数量确定协程是否全部完成。
package main
import (
"fmt"
"math/rand"
"sync"
"time"
)
var wg sync.WaitGroup
func Pi(i int){
// 执行结束前提示协程关闭一个
defer wg.Done()
// 设置协程每次不定时长的等待
wait_time := rand.Intn(5)
time.Sleep(time.Second * time.Duration(wait_time))
fmt.Printf("runing %v (sleep %v s)\n", i, wait_time)
}
func main() {
for i:=1; i<5; i++ {
wg.Add(1)
// 创建协程
go Pi(i)
}
// 等待协程结束
wg.Wait()
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通