9.4.16.1 توضیحات #
با استفاده از الگو Bridge Channel می توانید بین ۲ کانال داده ای را منتقل کنید فرض کنید یک داده را به کانال input میفرستید و از دریافت داده آن را می توانید به کانال دیگری منتقل کنید و عملا شما یک پل برای انتقال داده ایجاد کردید.
9.4.16.2 دیاگرام #
9.4.17.3 نمونه کد #
1package main
2
3import "fmt"
4
5func main() {
6 // Declare input and output channels
7 input := make(chan int)
8 output := make(chan int)
9
10 // Launch goroutine to act as bridge between channels
11 go func() {
12 for {
13 // Wait for value on input channel
14 value := <-input
15
16 // Forward value to output channel
17 output <- value
18 }
19 }()
20
21 // Send a value to the input channel
22 input <- 1
23
24 // Receive the value from the output channel
25 fmt.Println(<-output) // prints "1"
26}
در کد فوق ما ۲ کانال input و output ایجاد کردیم سپس داخل یک گوروتین داده را از کانال input دریافت کردیم و داخل متغیر value قرار دادیم سپس value را به کانال output فرستادیم و در نهایت داده دریافت شده از کانال output را چاپ کردیم.
9.4.18.4 کاربردها #
- فیلتر داده ها: یک گوروتین می تواند به عنوان پلی بین یک کانال ورودی و یک کانال خروجی عمل کند، داده ناخواسته را فیلتر کرده و فقط آنهایی را که معیارهای خاصی را برآورده می کنند، ارسال می کند.
- تبدیل مقادیر: یک گوروتین می تواند به عنوان پلی بین یک کانال ورودی و یک کانال خروجی عمل کند و مقادیر دریافت شده در کانال ورودی را قبل از ارسال به کانال خروجی تبدیل کند.
- Fan-out: یک گوروتین می تواند به عنوان پلی بین یک کانال ورودی و چندین کانال خروجی عمل کند و مقدار یکسان را به طور همزمان به چندین کانال ارسال کند.
- Fan-in: یک گوروتین می تواند به عنوان پلی بین چندین کانال ورودی و یک کانال خروجی واحد عمل کند و مقادیر را از چندین کانال به یک کانال به روشی کنترل شده ارسال کند.
- ترکیب چند کانال: یک گوروتین می تواند به عنوان پلی بین چندین کانال ورودی و یک کانال خروجی واحد عمل کند و مقادیر از چندین کانال را در یک کانال واحد ترکیب کند تا توسط یک گوروتین consume شود.