當前位置: 首頁>>編程語言>>正文


Go語言教程:協程

返回Go語言教程首頁

概念簡介

Go語言的協程(goroutine)從執行上來說是輕量級的線程。

例程代碼


package main

import "fmt"

func f(from string) {
    for i := 0; i < 3; i++ {
        fmt.Println(from, ":", i)
    }
}

func main() {

    // 假設我們有一個函數叫做 `f(s)`。一般會這樣同步(synchronously)調用
    f("direct")

    // 使用 `go f(s)` 在一個 Go 協程中調用這個函數。
    // 這個新的 Go 協程將會並發(concurrently)執行這個函數。
    go f("goroutine")

    // 你也可以為匿名函數啟動一個 Go 協程。
    go func(msg string) {
        fmt.Println(msg)
    }("going")

    // 現在這兩個 Go 協程在獨立的 Go 協程中異步(asynchronously)運行,所以
    // 程序直接運行到這一行。這裏的 `Scanln` 代碼需要我們
    // 在程序退出前按下任意鍵結束。
    fmt.Scanln()
    fmt.Println("done")
}

執行&輸出


# 當我們運行這個程序時,將首先看到阻塞式調用的輸出,然後是
# 兩個 Go 協程的交替輸出。這種交替的情況表示 Go 運行時是以
# 並發的方式運行協程的。
$ go run goroutines.go
direct : 0
direct : 1
direct : 2
goroutine : 0
going
goroutine : 1
goroutine : 2

done


接下來我們將學習在並發的 Go 程序中的 Go 協程的輔助特性:通道(channels)。

課程導航

學習上一篇:Go語言教程:錯誤處理    學習下一篇:Go語言教程:通道

相關資料

本例程github源代碼:https://github.com/xg-wang/gobyexample/tree/master/examples/goroutines

Go語言協程

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/4039.html,未經允許,請勿轉載。