長時間実行される Go プログラムの実行を維持する
Go で長時間実行されるサーバーを実行する場合、main 関数が終了しないようにすることが重要ですプログラムを存続させるために。一般的な方法の 1 つは、fmt.Scanln() を使用して実行を無期限に一時停止することですが、このアプローチは最適ではない可能性があります。
ブロッキング ベースのソリューション
より良い解決策は次のとおりです。 main が終了するのを防ぐためにブロッキング操作を使用します。次のコードを考えてみましょう:
package main import ( "fmt" "time" ) func main() { go forever() select {} // block forever } func forever() { for { fmt.Printf("%v+\n", time.Now()) time.Sleep(time.Second) } }
この例では、select {} を使用してメインの goroutine を無期限にブロックします。これにより、多重化チャネル上の操作が完了するまで無期限に待機するブロッキング選択操作が作成されます。 select ステートメントにはチャネルがないため、終了することはありません。
その他の考慮事項
要約すると、次のようになります。ブロッキング操作 (select {} など) を使用することは、長時間実行される Go プログラムを存続させるための信頼できる方法です。このアプローチを適切なシャットダウン処理およびアイドル状態検出メカニズムと組み合わせることで、堅牢で安定したシステムが保証されます。
以上が長時間実行されている Go プログラムが終了しないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。