サーチ…


前書き

ゴルーチンは、Goランタイムによって管理される軽量スレッドです。

go f(x、y、z)

新しいゴルーチンを起動する

f(x、y、z)

f、x、y、zの評価は現在のgoroutineで行われ、fの実行は新しいgoroutineで行われます。

Goroutinesは同じアドレス空間で実行されるため、共有メモリへのアクセスは同期されなければなりません。 syncパッケージには便利なプリミティブが用意されていますが、他のプリミティブと同じようにGoではあまり必要としません。

リファレンス: https : //tour.golang.org/concurrency/1

Goroutines基本プログラム

package main

import (
    "fmt"
    "time"
)

func say(s string) {
    for i := 0; i < 5; i++ {
        time.Sleep(100 * time.Millisecond)
        fmt.Println(s)
    }
}

func main() {
    go say("world")
    say("hello")
}

ゴルーチンは、他の関数と同時に実行することができる関数です。ゴルーチンを作成するには、キーワードgo後に関数呼び出しを続けます。

package main

import "fmt"

func f(n int) {
  for i := 0; i < 10; i++ {
    fmt.Println(n, ":", i)
  }
}

func main() {
  go f(0)
  var input string
  fmt.Scanln(&input)
}

一般に、関数呼び出しは、関数本体内のすべてのステートメントを実行し、次の行に戻ります。しかし、ゴルーチンでは、関数が完了するのを待たずにただちに次の行に戻ります。したがって、 Scanln関数への呼び出しが含まれています。そうでなければ、プログラムは数値を印刷せずに終了しました。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow