Membunuh Goroutine Dengan Anggun
Dalam Go, goroutine memberikan keselarasan, membolehkan berbilang tugasan dilaksanakan serentak. Kadangkala, ia menjadi perlu untuk menamatkan goroutine, seperti apabila kita perlu menutup aplikasi dengan anggun.
Pertimbangkan kod berikut:
<code class="go">func startsMain() { go main() } func stopMain() { //kill main } func main() { //infinite loop }</code>
Dalam senario ini, goroutine utama dijalankan gelung tak terhingga, dan kami ingin menghentikannya dalam fungsi stopMain. Bagaimanakah kita boleh mencapai ini?
Penyelesaian terletak pada penggunaan saluran untuk berkomunikasi antara goroutine. Berikut ialah coretan kod yang dipertingkatkan:
<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>
Kami memperkenalkan saluran keluar dari jenis struct{}, yang boleh menyimpan nilai struct kosong.
Mekanisme ini membolehkan kami menamatkan gelung tak terhingga dengan anggun dengan memberi isyarat kepada goroutine melalui saluran berhenti.
Atas ialah kandungan terperinci Bagaimana untuk Menamatkan Goroutine dengan Anggun dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!