package main import ( "fmt" "time" ) func test() { for i := 0; i < 5; i++ { fmt.Printf("协程(具名函数) i = %+v \n", i) time.Sleep(time.Second) // 休眠1秒 } } func main() { // 开启协程(具名函数) go test() // 开启协程(匿名函数) go func() { for i := 0; i < 5; i++ { fmt.Printf("协程(匿名函数) i = %+v \n", i) time.Sleep(time.Second) // 休眠1秒 } }() // 主线程的for循环 for i := 0; i < 5; i++ { fmt.Printf("主线程 i = %+v \n", i) time.Sleep(time.Second) // 休眠1秒 } //========== 输出过程·开始 ==========// // 主线程 i = 0 // 协程(匿名函数) i = 0 // 协程(具名函数) i = 0 // 协程(具名函数) i = 1 // 协程(匿名函数) i = 1 // 主线程 i = 1 // 协程(具名函数) i = 2 // 协程(匿名函数) i = 2 // 主线程 i = 2 // 主线程 i = 3 // 协程(匿名函数) i = 3 // 协程(具名函数) i = 3 // 协程(具名函数) i = 4 // 协程(匿名函数) i = 4 // 主线程 i = 4 //========== 输出过程·结束 ==========// } //========== 总结 ==========// // 1、Go开启协程非常简单,使用go关键字,在其后面调用具名函数或匿名函数即可。 // 2、协程是依附主线程的,即只要主线程退出了,不管协程有没有开始或执行到哪里,协程都会退出。以上面的代码为例,如果把两个协程 // 的for循环放到主线程之后,那么两个协程就都不会执行了,因为主线程执行完for循环就会退出。
Copyright © 2024 码农人生. All Rights Reserved