サーチ…
前書き
ゴルーチンは、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