022_go语言中的协程
代码演示
package main
import "fmt"
func f(from string) {
for i := 0; i < 3; i++ {
fmt.Println(from, ":", i)
}
}
func main() {
f("direct")
go f("goroutine")
go func(msg string) {
fmt.Println(msg)
}("going")
fmt.Scanln()
fmt.Println("done")
}
代码运行结果
direct : 0
direct : 1
direct : 2
goroutine : 0
going
goroutine : 1
goroutine : 2done
代码解读:
- 协程是一个轻量级的线程,是为了并发执行
- 使用关键字go来启动协程并在该协程中调用f()这个函数
- 上述例子中的go func()是为一个匿名函数启动一个协程
- 以上有两个go协程,这两个go协程是独立的,异步运行
- 最终两个go协程交替输出,并在Scanln前运行完毕
- 注意:协程有可能在main函数运行完之前,没有结束。所以在main函数最后一定要加入等待协程运行完之后再退出的机制