ホームページ >バックエンド開発 >Golang >Go プログラムのメイン Goroutine を無期限に実行し続けるにはどうすればよいですか?

Go プログラムのメイン Goroutine を無期限に実行し続けるにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-26 21:46:11517ブラウズ

How to Keep a Go Program's Main Goroutine Running Indefinitely?

Go プロジェクトのメイン ゴルーチンを無期限に実行し続ける

他のプログラミング言語の main 関数とは異なり、Go のメイン ゴルーチンは関数から戻ると終了します。これにより、メインの goroutine を無限に実行し続けるにはどうすればよいでしょうか?

Goroutine を「スリープ」させます

いくつかの構造は、CPU リソースを消費せずにメインの goroutine をブロックできます。

  • 大文字と小文字を区別しないステートメントを選択するか、デフォルト
  • 空のチャネルから受信
  • nil チャネルから受信
  • nil チャネルに送信
  • ロックされた sync.Mutex をロック

を終了するGoroutine

終了する方法を提供したい場合は、チャネルを使用できます:

  1. 終了チャネルを作成します: quit := make(chan struct{})
  2. main() で、終了チャネルをブロックします。 <-quit
  3. 別の goroutine から、終了の準備ができたら終了チャネルにシグナルを送信します: close(quit)

Sleeping Without Blocking

メインの goroutine をブロックせず、単に終了するのを防ぐだけの場合は、次の構造を使用できます。使用:

  • 十分に長い期間 (約 292 年) で time.Sleep() を呼び出します
  • スリープ上で無限ループします: for { time.Sleep(...) }

注:

終了を閉じる他の goroutine が実行中であっても、channel はいつでもプログラムを終了できます。これは、閉じたチャネルからの受信時にメインのゴルーチンが戻り、メイン以外のゴルーチンが完了する前にプログラムが終了するためです。

以上がGo プログラムのメイン Goroutine を無期限に実行し続けるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。