CodeFun Go

协程

Goroutines 相当于一个轻量级的线程。

只需在函数或方法调用前添加 go 关键字。该函数或方法将在协程中并发地执行。

go func()

如示例所示,注意观察协程和正常函数的执行顺序及输出顺序的区别。

main 包中的 main 函数是主协程,所有的协程都是从主协程开始的。主协程代表主程序。一旦它退出就意味着程序已经退出。

所以我们设置了一个超时时间,为了在主协程存在之前调度 goroutine。

package main

import (
	"fmt"
	"time"
)

func main() {
	f("direct1")

	go f("goroutine1")

	f("direct2")

	time.Sleep(time.Second)
	fmt.Println("done")
}

func f(from string) {
    fmt.Println(from, "run")
}
direct1 run
direct2 run
goroutine1 run
done