在线文档 > Golang练习 > 协程
Go协程goroutine
是轻量级的执行线程。
package main
import (
"fmt"
"time"
)
func f(from string) {
for i := 0; i < 3; i++ {
fmt.Println(from, ":", i)
}
}
func main() {
// 假设有一个函数调用 `f(s)`。
// 以下是我们以常规方式 同步 运行它。
f("direct")
// 要在 协程 中调用此函数,请使用 `go f(s)`。
// 这个新的 go 协程 并发 执行这个函数。
go f("goroutine")
//你也可以为匿名函数调用启动 协程。
go func(msg string) {
fmt.Println(msg)
}("going")
// 现在我们的两个函数调用在不同的 协程 中异步运行。
// 然后等待协程结束,为了更可靠的方法,请使用 WaitGroup。
time.Sleep(time.Second)
fmt.Println("done")
}
运行结果如下:
$ go run goroutines.go
direct : 0
direct : 1
direct : 2
goroutine : 0
going
goroutine : 1
goroutine : 2
done
当我们运行这个程序时,首先会看到阻塞式调用的输出,然后是两个协程的交替输出。 这种交替的情况表示 Go runtime 是以并发的方式运行协程的。
接下来,我们将看看并发 Go 程序中 goroutines 的补充:通道。