Go程式範例


goroutine是一個輕量級的執行執行緒。

假設有一個函式呼叫f(s)。 下面是以通常的方式呼叫它,同步執行它。

要在goroutine中呼叫此函式,請使用go f(s)。 這個新的goroutine將與呼叫同時執行。

也可以為匿名函式呼叫啟動一個goroutine

兩個函式呼叫現在在不同的goroutine中非同步執行,所以執行到這裡。這個ScanIn程式碼要求我們在程式退出之前按一個鍵。

當我們執行這個程式時,首先看到阻塞呼叫的輸出,然後是兩個gouroutines的交替輸出。 這種交替反映了Go執行時並行執行的goroutine

接下來,我們來看看在並行Go程式中goroutines的一個補充:channels

所有的範例程式碼,都放在 F:\worksp\golang 目錄下。安裝Go程式設計環境請參考:/2/23/798.html

goroutines.go的完整程式碼如下所示 -

package main

import "fmt"

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

func main() {

    // Suppose we have a function call `f(s)`. Here's how
    // we'd call that in the usual way, running it
    // synchronously.
    f("direct")

    // To invoke this function in a goroutine, use
    // `go f(s)`. This new goroutine will execute
    // concurrently with the calling one.
    go f("goroutine")

    // You can also start a goroutine for an anonymous
    // function call.
    go func(msg string) {
        fmt.Println(msg)
    }("going")

    // Our two function calls are running asynchronously in
    // separate goroutines now, so execution falls through
    // to here. This `Scanln` code requires we press a key
    // before the program exits.
    var input string
    fmt.Scanln(&input)
    fmt.Println("done")
}

執行上面程式碼,將得到以下輸出結果 -

F:\worksp\golang>go run goroutines.go
direct : 0
direct : 1
direct : 2
goroutine : 0
goroutine : 1
goroutine : 2
going
123456
done