私はGoで書かれた長期稼働サーバーを持っています。Main は、プログラムのロジックが実行されるいくつかのゴルーチンを起動します。その後、メインは何も役に立ちません。main が終了すると、プログラムは終了します。プログラムを実行し続けるために私が現在使用している方法は、fmt.Scanln() への単純な呼び出しです。他の人がメインを終了させない方法を知りたいです。以下は基本的な例です。ここで使用できるアイデアやベスト プラクティスは何ですか?
チャネルを作成し、そのチャネルで受信することでメインの終了を遅らせることを検討しましたが、ある時点ですべてのゴルーチンが非アクティブになると問題になる可能性があると思います。
補足: 私のサーバー (例ではありません) では、プログラムは実際にはシェルに接続して実行されていないため、とにかくコンソールとやり取りする意味がありません。今のところはうまくいきますが、「正しい」方法があると仮定して探しています。
package main
import (
"fmt"
"time"
)
func main() {
go forever()
//Keep this goroutine from exiting
//so that the program doesn't end.
//This is the focus of my question.
fmt.Scanln()
}
func forever() {
for ; ; {
//An example goroutine that might run
//indefinitely. In actual implementation
//it might block on a chanel receive instead
//of time.Sleep for example.
fmt.Printf("%v+\n", time.Now())
time.Sleep(time.Second)
}
}