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