در جست و جوی خود
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<<هدایت کانال----------------------------------------زمان تأخیر>>
مطلبی دیگر از این انتشارات
4.آموزش GO با مثال(ثابت ها)
مطلبی دیگر از این انتشارات
10.آموزش GO با مثال(آرایه maps)
مطلبی دیگر از این انتشارات
20.آموزش GO با مثال(اینترفیس ها)