Windows でのゴルーチンの実行: サイレント障害のトラブルシューティング
ゴルーチンを含む単純なテストでは、予期した出力が生成されず、Windows で予期しない動作が示されます。 。この問題は、main 関数が goroutine の完了を待たずに終了するために発生します。
Go Awaits
「go」キーワードを使用して goroutine が起動されると、 main 関数と同時に実行されます。ただし、main 関数の実行は一時停止せず、呼び出されたゴルーチンの完了を待ちます。その結果、main 関数が終了し、ゴルーチンがスケジュールされないままになる可能性があります。
改善策
ゴルーチンが実行して出力を出力できるようにするために、メイン関数はしばらく待機するように関数を変更する必要があります。これは、「time」パッケージと「Sleep」機能を使用して実現できます。スリープ時間を導入することで、main 関数は終了する前に goroutine を実行して出力を生成する機会を与えます。
修正コード
次の修正コードは、次のようにして問題を解決します。 main 関数の最後に 10 秒のスリープ時間を追加します:
package main
import (
"fmt"
"time"
)
func test() {
fmt.Println("test")
}
func main() {
go test()
time.Sleep(10 * time.Second)
}
Output
変更されたコードにより、期待される出力が生成されるようになりました:
test
この変更により、メイン関数が待機できるようになります。 goroutine を起動した後、プログラムが終了する前に実行して「test」メッセージを出力するのに十分な時間を与えます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3