【go笔记】使用WaitGroup控制协程退出

前言

正常情况下,主协程一旦退出,其子协程也会全部中止并退出。为了阻塞主协程,可以使用time.Sleep(),也可以使用WaitGroup

用法说明

// 导入sync
import "sync"

// 定义一个sync.WaitGroup
var wg sync.WaitGroup

// 增加计数
wg.Add()

// 阻塞
wg.Wait()

// 减计数。当计数为0,主协程停止等待
wg.Done()

简单示例

package main

import (
	"fmt"
	"sync"
)

var wg sync.WaitGroup

func WgTest(n int) {
	// 减计数
	defer wg.Done()
	fmt.Println(n)
}

func main() {
	// 协程数
	var numGoroutine int = 5
	wg.Add(numGoroutine)
	for i := 0;i < numGoroutine; i++ {
		go WgTest(i)
	}
	// 使用wg.Wait()阻塞主协程
	wg.Wait()
}
posted @   花酒锄作田  阅读(342)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示