Eine Goroutine elegant töten
In Go sorgen Goroutinen für Parallelität, sodass mehrere Aufgaben gleichzeitig ausgeführt werden können. Manchmal ist es notwendig, eine Goroutine zu beenden, beispielsweise wenn wir eine Anwendung ordnungsgemäß herunterfahren müssen.
Bedenken Sie den folgenden Code:
<code class="go">func startsMain() { go main() } func stopMain() { //kill main } func main() { //infinite loop }</code>
In diesem Szenario wird die Haupt-Goroutine ausgeführt eine Endlosschleife, und wir möchten sie in der Funktion stopMain stoppen. Wie können wir das erreichen?
Die Lösung liegt in der Nutzung von Kanälen für die Kommunikation zwischen Goroutinen. Hier ist ein verbesserter Codeausschnitt:
<code class="go">var quit chan struct{} func startLoop() { quit = make(chan struct{}) go loop() } func stopLoop() { close(quit) } // BTW, you cannot call your function main, it is reserved func loop() { for { select { case <-quit: return // better than break default: // do stuff. I'd call a function, for clarity: do_stuff() } } }</code>
Wir führen einen Quit-Kanal vom Typ struct{} ein, der einen leeren Strukturwert enthalten kann.
Dieser Mechanismus ermöglicht es uns, die Endlosschleife ordnungsgemäß zu beenden, indem wir der Goroutine über den Beendigungskanal ein Signal senden.
Das obige ist der detaillierte Inhalt vonWie kann man eine Goroutine in Go ordnungsgemäß beenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!