Terdapat dua mod penggunaan paip untuk komunikasi antara fungsi dalam bahasa Go: mod pengeluar-pengguna: fungsi pengeluar menulis pada paip, dan fungsi pengguna membaca paip. Corak kumpulan kerja: Satu fungsi mencipta saluran paip kerja, dan fungsi lain menerima kerja daripada saluran paip dan melaksanakannya.
Mod komunikasi antara fungsi dan paip dalam bahasa Go
Saluran paip ialah mekanisme yang berkesan untuk komunikasi serentak dalam bahasa Go. Paip ialah baris gilir penampan elemen yang boleh ditulis pada satu hujung paip dan dibaca dari hujung yang lain. Dalam proses ini, paip boleh digunakan untuk menyegerakkan pelaksanaan dan menghantar data antara fungsi.
1. Paip menghantar dan menerima
Sebuah paip boleh dimulakan sebagai saluran int, yang boleh memuatkan sebarang bilangan int. Fungsi make
digunakan untuk membuat saluran paip: make
函数用于创建管道:
numbers := make(chan int)
可以在协程中发送值到管道中,使用 chan <-
:
go func() { numbers <- 42 close(numbers) }()
可以使用 <-chan
从管道中读取值:
var num int num = <-numbers
close
函数用于关闭管道,表示管道中不再写入数据:
close(numbers)
2. 缓冲管道
管道可以是无缓冲的,这意味着管道中最多只能保存一个元素。当管道满时,写操作会被阻塞。可以通过指定第二个参数 bufferSize
来创建缓冲管道:
numbers := make(chan int, 10)
现在管道可以保存最多 10 个元素,在缓冲区填满之前,写操作不会被阻塞。
3. 函数与管道通信的模式
函数与管道通信有两种常见模式:
4. 实战案例:生产者-消费者模式
以下是一个简单的示例,展示了如何在函数之间使用管道实现生产者-消费者模式:
package main import ( "fmt" "sync" ) func producer(ch chan int) { for i := 0; i < 10; i++ { ch <- i } close(ch) } func consumer(ch chan int, wg *sync.WaitGroup) { for num := range ch { fmt.Println(num) } wg.Done() } func main() { ch := make(chan int) var wg sync.WaitGroup wg.Add(1) go producer(ch) go consumer(ch, &wg) wg.Wait() }
在这个示例中,producer
函数会将 10 个整数写入管道中,然后关闭管道。consumer
函数将会从管道中读取整数并打印出来。为了确保 consumer
函数在 producer
函数完成之前不会退出,使用了 sync.WaitGroup
rrreee
chan : 🎜rrreee🎜 boleh menggunakan <code>< ;-chan
Baca nilai daripada paip: 🎜rrreee🎜bufferSize
: 🎜rrreee🎜Paip kini boleh memuatkan sehingga 10 elemen dan tulisan tidak akan disekat sehingga penimbal terisi. 🎜🎜🎜3. Mod komunikasi antara fungsi dan paip 🎜🎜🎜Terdapat dua mod biasa komunikasi antara fungsi dan paip: 🎜producer
menulis 10 integer ke dalam paip dan kemudian menutup paip. Fungsi consumer
akan membaca integer daripada paip dan mencetaknya. Untuk memastikan fungsi consumer
tidak keluar sebelum fungsi producer
selesai, sync.WaitGroup
digunakan untuk penyegerakan. 🎜Atas ialah kandungan terperinci Corak komunikasi antara fungsi golang dan saluran paip. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!