Heim >Backend-Entwicklung >Golang >Wie verhindere ich, dass die Haupt-Goroutine in einem Go-Programm vorzeitig beendet wird?
Persistenz der Haupt-Goroutine in Go-Programmen
Man könnte auf die Frage stoßen, wie man verhindern kann, dass die Haupt-Goroutine eines Go-Programms vorzeitig beendet wird. Mit anderen Worten besteht das Ziel darin, das Programm auf unbestimmte Zeit laufen zu lassen, außer durch explizite Benutzereingriffe.
„Schlafen“ der Haupt-Goroutine
Es gibt mehrere Ansätze Die Haupt-Goroutine wartet ewig, ohne CPU-Ressourcen zu verbrauchen:
Eine leere Auswahl Aussage:
select {}
Empfang von einem nicht initialisierten Kanal:
<-make(chan int)
Empfang von einem Nullkanal:
<-(chan int)(nil)
Senden an eine Null Kanal:
(chan int)(nil) <- 0
Sperren einer gesperrten Synchronisierung.Mutex:
mu := sync.Mutex{} mu.Lock() mu.Lock()
Beenden des Programms
Wenn ein Mechanismus zum Beenden des Programms gewünscht wird, kann ein einfacher Kanal dienen Zweck:
var quit = make(chan struct{}) func main() { // Startup code... // Blocking (waiting for quit signal): <-quit } // Quitting in another goroutine: close(quit)
Schlafen ohne Blockierung
Ein alternativer Ansatz, um das Programm am Laufen zu halten, ohne die Haupt-Goroutine zu blockieren, ist die Verwendung einer langen Schlafdauer:
time.Sleep(time.Duration(1<<63 - 1))
Für extrem lange laufende Programme kann eine Schleife solcher Schlafanweisungen verwendet werden:
for { time.Sleep(time.Duration(1<<63 - 1)) }
Das obige ist der detaillierte Inhalt vonWie verhindere ich, dass die Haupt-Goroutine in einem Go-Programm vorzeitig beendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!