协程的基本创建和使用
代码
package mainimport ( "io" "log" "os" "runtime" "time")func main() { log.SetOutput(io.MultiWriter(os.Stdout)) log.SetFlags(log.Lshortfile) log.Println("main 函数1") // 使用 go 关键字开启一个协程 go func() { defer log.Println("A.defer") log.Println("匿名协程函数开始...") func() { defer log.Println("B.defer") log.Println("协程中的匿名函数, 这里主要演示的是,在协程中退出当前协程") log.Println("3秒后退出协程") time.Sleep(3 * time.Second) runtime.Goexit() }() }() log.Println("main 函数2") // 使用一个死循环阻塞主线程, 确保程序不会退出 for { time.Sleep(1 * time.Second) }}
输出
main.go:16: main 函数1main.go:34: main 函数2main.go:21: 匿名协程函数开始...main.go:25: 协程中的匿名函数, 这里主要演示的是,在协程中退出当前协程main.go:26: 3秒后退出协程panic.go:522: B.deferpanic.go:522: A.defer
协程中的数据通信 channel