在线文档  >   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 的补充:通道。