Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah anda membaca daripada berbilang saluran serentak di Golang?

Bagaimanakah anda membaca daripada berbilang saluran serentak di Golang?

Patricia Arquette
Patricia Arquetteasal
2024-11-07 10:31:03894semak imbas

How do you read from multiple channels simultaneously in Golang?

Membaca Berbilang Saluran Serentak di Golang

Semasa anda terjun ke dunia Golang, anda mungkin menghadapi tugas untuk mencipta sebarang-untuk -satu saluran di mana berbilang gorout masuk ke satu destinasi. Artikel ini akan menyelidiki strategi untuk mencapai matlamat ini di Golang.

Contoh Senario

Pertimbangkan senario di mana dua goroutin, numgen1 dan numgen2, menjana nombor secara serentak dan menuliskannya ke saluran num1 dan num2, masing-masing. Matlamat anda adalah untuk mencipta proses berasingan, addnum, yang menjumlahkan nombor yang diterima daripada num1 dan num2 dan menulis hasilnya kepada jumlah saluran.

Menggunakan Penyata Pilih

Untuk membaca daripada berbilang saluran secara serentak, anda boleh menggunakan penyataan pilih. Dalam blok pilih, setiap kes mewakili saluran yang ingin anda baca. Kes pertama yang menerima mesej akan melaksanakan blok kodnya yang sepadan.

Berikut ialah contoh menggunakan pernyataan pilih:

func main() {

  c1 := make(chan int)
  c2 := make(chan int)
  out := make(chan int)

  go func(in1, in2 <-chan int, out chan<- int) {
    for {
      sum := 0
      select {
      case sum = <-in1:
        sum += <-in2

      case sum = <-in2:
        sum += <-in1
      }
      out <- sum
    }
  }(c1, c2, out)
}

Groutine ini akan berjalan selama-lamanya, membaca secara berterusan dan menjumlahkan nilai daripada saluran c1 dan c2. Saluran keluar menyediakan cara untuk menggunakan jumlah. Untuk menamatkan goroutine, anda perlu menutup kedua-dua c1 dan c2 dan kemudian tutup sebelum keluar.

Atas ialah kandungan terperinci Bagaimanakah anda membaca daripada berbilang saluran serentak di Golang?. 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