正文

Go语言入门13之runtime包案例讲解(golang time包)硬核推荐

文章摘要

文章介绍了一个使用Go语言协程和等待组的示例,展示了两个协程Test01和Test02的执行流程。Test01在循环中打印信息,循环5次后结束;Test02则在等待Test01完成的基础上启动,并在i=3时退出。代码通过使用`defer`和`runtime.Gosched()`确保了协程的顺序执行和正确退出。文章重点描述了协程之间的相互等待、执行顺序以及如何通过条件控制退出。

// 定义两个函数,Test01和Test02 // Test02在Test01运行结束之后运行 // 并且Test02在i=3的时候结束运行 //Test01 func Test01(wg *sync.WaitGroup) { defer func() { fmt.Println(“Test01结束!”) wg.Done() }() fmt.Println(“协程01循环输出:”) for i :=0; i < 5; i++ { fmt.Println(“协程01 -“, i) } } // Test02 func Test02(wg *sync.WaitGroup) { defer func() { fmt.Println(“Test02结束!”) wg.Done() }() // 等待Test01运行结束 runtime.Gosched() fmt.Println(“协程02循环输出:”) for i :=0; i < 5; i++ { if i==3 { fmt.Println(“i=3 退出!”) // 当i=3时执行defer里的语句然后退出 runtime.Goexit() } fmt.Println(“协程02 -“, i) } } // main函数调用 func main() { var wg sync.WaitGroup wg.Add(2) go Test01(&wg) go Test02(&wg) wg.Wait() fmt.Println(“This is main function!”) }