در جست و جوی خود
27.آموزش GO با مثال(Select)
دستور select در GO این امکان را به شما میدهدکه روی عملیات کانال چندگانه بتوانید زمان گذاری کنید.ترکیب کردن goroutineها و کانالها با select یک ویژگی قدرتمند Go است.
package main
import "time"
import "fmt"
func main() {
برای مثال ما select را بر روی دو کانالمان اعمال مکنیم.
c1 := make(chan string)
c2 := make(chan string)
هر کانال یک مقدار را پس از گذری از زمان دریافت میکند , به عنوان مثال برای شبیه سازی . عملیات های مسدود سازی RPC در goroutine ها همزمان اجرا میشوند.
go func() {
time.Sleep(1 * time.Second)
c1 <- "one"
}()
go func() {
time.Sleep(2 * time.Second)
c2 <- "two"
}()
ما از select
برای منتظر گذاشتن هردوی این مقادیر به صورت همزمان استفاده میکنیم , هرکدام از آنها که نوبت آن میرسد را چاپ کنیم.
for i := 0; i < 2; i++ {
select {
case msg1 := <-c1:
fmt.Println("received", msg1)
case msg2 := <-c2:
fmt.Println("received", msg2)
}
}
}
ما ابتدا مقدار "one"
و سپس "two"
به صورت جداگانه دریافت میکنیم.
$ time go run select.go
received one
received two
توجه داشته باشید که زمان اجرای کل فقط~2 ثانیه است زیرا هر دو 1 و 2 ثانیه Sleeps
همزمان اجرا میشوند.
real 0m2.245s
<<هدایت کانال----------------------------------------زمان تأخیر>>
مطلبی دیگر از این انتشارات
14.آموزش GO با مثال (توابع متغیر)
مطلبی دیگر از این انتشارات
26.آموزش GO با مثال(هدایت کانال)
مطلبی دیگر از این انتشارات
8.آموزش GO با مثال(آرایه ها)