协程的基本创建和使用
代码
package main
import (
"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 函数1
main.go:34: main 函数2
main.go:21: 匿名协程函数开始...
main.go:25: 协程中的匿名函数, 这里主要演示的是,在协程中退出当前协程
main.go:26: 3秒后退出协程
panic.go:522: B.defer
panic.go:522: A.defer
协程中的数据通信 channel