Rumah > pembangunan bahagian belakang > Golang > Cara menutup saluran di golang

Cara menutup saluran di golang

PHPz
Lepaskan: 2023-04-03 09:41:02
asal
1028 orang telah melayarinya

Golang ialah bahasa pengaturcaraan popular yang memfokuskan pada pengendalian konkurensi. Di Golang, saluran ialah mekanisme konkurensi yang penting untuk komunikasi yang cekap antara gorouti yang berbeza. Saluran boleh digunakan untuk menghantar dan menerima data, dan mempunyai beberapa ciri lain yang sangat berguna. Apabila menggunakan saluran Golang, pembangun perlu memberi perhatian kepada penutupan saluran. Dalam artikel ini, kami akan membincangkan cara saluran Golang ditutup dan memberikan beberapa petua berguna.

1. Apakah saluran Golang ditutup?

Saluran di Golang ialah mekanisme komunikasi dua hala yang membolehkan data dipindahkan antara gorouti yang berbeza. Dalam saluran, data dibungkus dalam mesej dan boleh dihantar serta diterima melalui saluran. Apabila saluran ditutup, saluran menghantar mesej kosong kepada semua penerima, memberitahu mereka bahawa tiada lagi data akan dihantar.

Saluran Golang boleh ditutup dengan memanggil fungsi close() terbina dalam. Fungsi ini menerima parameter jenis saluran dan melaksanakan operasi penutupan. Kod berikut menunjukkan cara menutup saluran:

ch := make(chan int)
close(ch)
Salin selepas log masuk

Apabila saluran ditutup, data tidak lagi boleh dibaca atau ditulis daripada saluran, jika tidak, ralat panik akan ditimbulkan. Jika anda terus membaca atau menulis ke saluran, perkara berikut akan berlaku:

  1. Jika anda cuba menulis data ke saluran yang telah ditutup, ralat panik akan ditimbulkan.
  2. Jika anda cuba membaca data daripada saluran yang telah ditutup, data tersebut masih boleh dibaca. Walau bagaimanapun, data yang dibaca ialah data yang tinggal dalam saluran dan apabila anda membaca data daripada saluran kemudian, nilai sifar dan nilai Boolean dikembalikan untuk memberitahu anda bahawa saluran itu ditutup.
  3. Jika saluran tidak mempunyai data yang tinggal semasa membaca data daripada saluran, nilai sifar dan boolean akan dikembalikan untuk memberitahu anda bahawa saluran itu ditutup.

2. Mengapa saluran ditutup di Golang?

Terdapat beberapa sebab untuk menutup saluran:

  1. Beritahu penerima saluran bahawa saluran itu tidak mempunyai data untuk dihantar.
  2. Elakkan sekatan kekal dalam saluran.
  3. Halang saluran daripada ditulis oleh berbilang gorout untuk memastikan ketepatan operasi serentak.

Apabila anda tidak lagi menghantar data ke dalam saluran, anda harus menutup saluran dengan segera. Ini membolehkan gorout menunggu untuk menerima data dengan cepat mengetahui bahawa saluran telah ditutup untuk mengelakkan sekatan kekal.

Sila ingat bahawa apabila saluran ditutup, tiada lagi data boleh ditulis ke saluran, jika tidak ralat panik akan berlaku. Oleh itu, anda perlu memastikan bahawa semua gorout yang perlu menulis data ke saluran telah menyelesaikan operasi mereka sebelum menutup saluran.

3. Bagaimana hendak menutup saluran di Golang?

Di Golang, saluran boleh ditutup melalui fungsi terbina dalam close(). Selepas saluran ditutup, anda tidak lagi boleh menulis data ke saluran. Berikut ialah contoh menggunakan fungsi close() untuk menutup saluran:

c := make(chan int)
// 启动一个 goroutine
go func() {
   for i := 0; i < 5; i++ {
       c <- i // 往通道里面写入数据
   }
   close(c) // 关闭通道
}()

// 主 goroutine
for v := range c {
   fmt.Println(v)
}
Salin selepas log masuk

Dalam kod contoh di atas, kami memulakan goroutine dan menulis 5 integer ke dalam saluran c. Pada masa yang sama, goroutine menutup saluran selepas menulis data. Program utama menggunakan pernyataan untuk julat untuk membaca data dari saluran dan mencetaknya ke terminal.

4. Syor

Apabila menggunakan saluran Golang, adalah disyorkan agar anda sentiasa mengikuti amalan terbaik berikut:

  1. Apabila anda perlu menutup saluran, gunakan fungsi tutup () terbina dalam.
  2. Apabila menulis data ke saluran, sentiasa semak sama ada saluran itu ditutup.
  3. Sentiasa semak sama ada saluran ditutup sebelum membaca data daripada saluran.
  4. Asingkan logik penutupan saluran daripada logik penghantaran data untuk mengelakkan keadaan perlumbaan.

Atas ialah kandungan terperinci Cara menutup saluran di golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan