package main import ( "fmt" "time" ) func main() { go func() { fmt.Println("1、父协程 -> 开始") go func() { fmt.Println("3、子协程 -> 开始") time.Sleep(time.Second * 3) fmt.Println("4、子协程 -> 完成") }() fmt.Println("2、父协程 -> 完成") }() time.Sleep(time.Second * 5) // 休眠5秒阻止主线程退出 } //========== 输出过程·开始 ==========// // 1、父协程 -> 开始 // 2、父协程 -> 完成 // 3、子协程 -> 开始 // 4、子协程 -> 完成 //========== 输出过程·结束 ==========// //========== 总结 ==========// // 1、无论协程嵌套多少层,只要主线程退出了,所有协程都会被强制退出。 // 2、在主线程没退出的前提下,父协程执行完并不会中断子协程的执行。
package main import ( "fmt" "time" ) func foo() { fmt.Println("foo()开始") go func() { fmt.Println("函数内部的协程开始") for i := 1; i <= 5; i++ { fmt.Printf("i = %d \n", i) time.Sleep(time.Second) } fmt.Println("函数内部的协程结束") }() fmt.Println("foo()结束") } func main() { foo() time.Sleep(time.Second * 10) } //========== 输出过程·开始 ==========// // foo()开始 // foo()结束 // 函数内部的协程开始 // i = 1 // i = 2 // i = 3 // i = 4 // i = 5 // 函数内部的协程结束 //========== 输出过程·结束 ==========// //========== 总结 ==========// // 1、在主线程没有退出的前提下,函数体内部启动的协程并不会因为函数执行完而退出。
Copyright © 2025 码农人生. All Rights Reserved