Go は、処理能力を消費せずにメイン goroutine を無期限に実行し続けるための一連のメカニズムを提供します。次の戦略を検討してください:
ケースなしの選択: CPU を消費せずに永久にブロックすることは、ケースやデフォルト句のない select ステートメントによって実現できます:
select {}
空の状態から受信するChannel: メインの goroutine は、空のチャネルから継続的に受信することで無期限に一時停止できます:
<-make(chan int)
Nil Channel からの受信: 同様に、受信nil チャネルからは同じ結果が得られます効果:
<-chan int(nil)
Nil チャネルへの送信: nil チャネルへの送信もメインの goroutine を永久に一時停止します:
(chan int)(nil) <- 0
事前ロックされたものをロックするMutex: すでにロックされているミューテックスをロックすると、メインの goroutine が実質的に停止します:
mu := sync.Mutex{} mu.Lock() mu.Lock()
正常な終了を容易にするために、専用の終了チャネルを使用できます。活用される。プログラムを終了する必要が生じた場合、このチャネルは閉じられます:
var quit = make(chan struct{}) func main() { defer close(quit) // Application code... <-quit }
別のゴルーチンで、終了チャネルを閉じると、メインのゴルーチンの終了がトリガーされます:
close(quit)
メインの goroutine をブロックせずに終了しないようにすることが目標の場合、 time.Sleep() 関数は、約 292 年を上限とする十分に長い期間で使用できます:
time.Sleep(time.Duration(1<<63 - 1))
期間を延長する場合は、上記の time.Sleep():
を組み込んだ無限ループを検討してください。for { time.Sleep(time.Duration(1<<63 - 1)) }
以上がGo でメインの goroutine を無期限に実行し続けるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。