Memecahkan Gelung Berlabel Untuk dari Luar Skop
Dalam Go, mungkin sukar untuk mengganggu gelung berlabel untuk daripada kod yang wujud di luar skop gelung. Ini adalah perkara biasa apabila menggunakan rutin pergi untuk melaksanakan tugas berkala dan ingin menamatkan gelung berdasarkan syarat tertentu.
Penyelesaian:
Untuk mencapai ini, kami boleh menggunakan saluran isyarat. Begini cara untuk melakukannya:
<code class="go">quit := make(chan struct{})</code>
Saluran jenis struct{}{} digunakan untuk menghantar isyarat bahawa gelung harus pecah. Saluran ini dicipta di luar skop gelung.
Apabila syarat dipenuhi untuk memecahkan gelung, kami menutup saluran:
<code class="go">close(quit)</code>
Dengan menutup saluran, kami memberi isyarat bahawa rutin pergi harus ditamatkan.
Di dalam gelung berlabel untuk, masukkan pernyataan pilih untuk mendengar isyarat daripada saluran:
<code class="go">myLoop: for { select { case <-quit: break myLoop default: // Continue looping } }
Apabila saluran keluar ditutup, pernyataan pilih mengesan ini dan laksanakan pernyataan putus, dengan berkesan keluar dari gelung.
<code class="go">go func (){ for { // Loop continues until count > 5 or quit channel is closed fmt.Println("I will print every second", count) count++ if count > 5 { close(quit) wg.Done() return } <-t.C } }()</code>
Dalam rutin pergi ini , pernyataan pilih tidak diperlukan kerana gelung sudah dijalankan sebagai rutin pergi dan tidak perlu menyekat.
Dengan mengikuti langkah ini, anda boleh keluar daripada gelung berlabel untuk dari luar skop gelung dalam Gunakan saluran isyarat.
Atas ialah kandungan terperinci Bagaimanakah saya boleh keluar dari gelung berlabel untuk dari luar skopnya dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!