9.4.16 الگو Bridge Channel

9.4.16 الگو Bridge Channel

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}
1$ go run main.go
21

در کد فوق ما ۲ کانال input و output ایجاد کردیم سپس داخل یک گوروتین داده را از کانال input دریافت کردیم و داخل متغیر value قرار دادیم سپس value را به کانال output فرستادیم و در نهایت داده دریافت شده از کانال output را چاپ کردیم.

9.4.18.4 کاربردها #

  • فیلتر داده ها: یک گوروتین می تواند به عنوان پلی بین یک کانال ورودی و یک کانال خروجی عمل کند، داده ناخواسته را فیلتر کرده و فقط آنهایی را که معیارهای خاصی را برآورده می کنند، ارسال می کند.
  • تبدیل مقادیر: یک گوروتین می تواند به عنوان پلی بین یک کانال ورودی و یک کانال خروجی عمل کند و مقادیر دریافت شده در کانال ورودی را قبل از ارسال به کانال خروجی تبدیل کند.
  • Fan-out: یک گوروتین می تواند به عنوان پلی بین یک کانال ورودی و چندین کانال خروجی عمل کند و مقدار یکسان را به طور همزمان به چندین کانال ارسال کند.
  • Fan-in: یک گوروتین می تواند به عنوان پلی بین چندین کانال ورودی و یک کانال خروجی واحد عمل کند و مقادیر را از چندین کانال به یک کانال به روشی کنترل شده ارسال کند.
  • ترکیب چند کانال: یک گوروتین می تواند به عنوان پلی بین چندین کانال ورودی و یک کانال خروجی واحد عمل کند و مقادیر از چندین کانال را در یک کانال واحد ترکیب کند تا توسط یک گوروتین consume شود.