8

ゴルーチンがどのように機能するかを知るためだけに、ゴルーチンを使用していくつかのテストを行っていますが、まったく実行されていないようです。私は非常に簡単なテストを行いました:

package main

import (
    "fmt"
)

func test() {
    fmt.Println("test")
}

func main() {
    go test()
}

私はこれが「テスト」を出力することを期待していますが、単に何もせず、メッセージもエラーもありません。また、プログラムの最後にa を追加しfor {}て、ゴルーチンに何かを印刷する時間を与えようとしましたが、それは役に立ちませんでした。

何が問題になる可能性がありますか?

4

2 に答える 2

11

プログラムの実行は、呼び出された関数が完了するのを待たない

Go ステートメント

しばらく待ってください。例えば、

package main

import (
    "fmt"
    "time"
)

func test() {
    fmt.Println("test")
}

func main() {
    go test()
    time.Sleep(10 * time.Second)
}

出力:

test
于 2013-02-02T17:56:21.233 に答える
10

私はそれが答えられていることを知っていますが、完全を期すために:

チャンネル

package main

import (
    "fmt"
)

func test(c chan int) {
    fmt.Println("test")

    // We are done here.
    c <- 1
}

func main() {
    c := make(chan int)
    go test(c)

    // Wait for signal on channel c
    <- c
}
于 2013-02-05T13:38:38.757 に答える