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 : 2

done

代码解读:

  • 协程是一个轻量级的线程,是为了并发执行
  • 使用关键字go来启动协程并在该协程中调用f()这个函数
  • 上述例子中的go func()是为一个匿名函数启动一个协程
  • 以上有两个go协程,这两个go协程是独立的,异步运行
  • 最终两个go协程交替输出,并在Scanln前运行完毕
  • 注意:协程有可能在main函数运行完之前,没有结束。所以在main函数最后一定要加入等待协程运行完之后再退出的机制
posted @ 2018-04-05 16:41  Joestar  阅读(207)  评论(0编辑  收藏  举报