协程(goroutine) 是轻量级的执行线程。 |
|
package main |
|
import ( "fmt" "time" ) |
|
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") |
现在两个协程在独立的协程中 |
time.Sleep(time.Second) fmt.Println("done") } |
当我们运行这个程序时,首先会看到阻塞式调用的输出,然后是两个协程的交替输出。 这种交替的情况表示 Go runtime 是以并发的方式运行协程的。 |
$ go run goroutines.go direct : 0 direct : 1 direct : 2 goroutine : 0 going goroutine : 1 goroutine : 2 done |
接下来我们将学习协程的辅助特性:通道(channels)。 |
下一个例子: 通道