Rumah >pembangunan bahagian belakang >Golang >Bagaimana Anda Boleh Menghentikan Go For Loop Secara Luaran?

Bagaimana Anda Boleh Menghentikan Go For Loop Secara Luaran?

Barbara Streisand
Barbara Streisandasal
2024-10-26 09:52:29782semak imbas

How Can You Halt a Go For Loop Externally?

Menghentikan Pelaksanaan For Loop Secara Luaran dalam Go

Dalam Go, anda mungkin menghadapi senario di mana anda perlu menamatkan pelaksanaan gelung for dari luar skopnya. Sebagai contoh, anda mungkin mempunyai gelung jangka panjang yang perlu diganggu apabila syarat tertentu dipenuhi.

Untuk mencapai ini, anda boleh memanfaatkan saluran isyarat. Begini cara ia berfungsi:

Mencipta Saluran Isyarat

<code class="go">quit := make(chan struct{}{})</code>

Barisan ini mencipta saluran dengan struct kosong sebagai jenis nilainya. Ia akan digunakan untuk menandakan gelung berhenti.

Menutup Saluran

Dalam goroutine yang menjalankan gelung, anda boleh menggunakan fungsi tutup untuk menutup saluran isyarat apabila syarat yang diingini dipenuhi:

<code class="go">if count > 5 {
  close(quit)
  wg.Done()
  return
}</code>

Membaca daripada Saluran Tertutup

Apabila saluran berhenti ditutup, bacaan daripadanya kembali serta-merta dengan sifar nilai. Tingkah laku ini dieksploitasi dalam gelung luar. Secara lalai, membaca dari saluran tertutup menghalang selama-lamanya. Walau bagaimanapun, ini boleh dielakkan menggunakan pernyataan pilih:

<code class="go">myLoop:
for {
  select {
  case <-quit:
    break myLoop
  default:
    fmt.Println("iteration", i)
    i++
  }
}</code>

Dalam pernyataan pilih ini, kes lalai meneruskan lelaran gelung seperti yang dijangkakan. Apabila saluran berhenti ditutup, kes pertama berpuas hati, menyebabkan gelung pecah serta-merta.

Dengan menggunakan saluran isyarat, anda boleh menghentikan pelaksanaan gelung for daripada fungsi luaran atau goroutine dengan berkesan apabila perlu , memastikan lebih fleksibiliti dan kawalan ke atas pelaksanaan kod anda.

Atas ialah kandungan terperinci Bagaimana Anda Boleh Menghentikan Go For Loop Secara Luaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn