22.آموزش GO با مثال(Goroutines)

یک goroutine (روال گو) یک نخ سبک اجرایی است.

package main
import "fmt"
func f(from string) {
    for i := 0; i < 3; i++ {
        fmt.Println(from, ":", i)
    }
}
func main() {

فرض کنید ما یک تابع داریم که (f(sرا فراخوانی میکند. اینجا ما اون رو از راه معمول فراخوانی میکنیم، اجرای آن به صورت همگام.

   f("direct")

برای فراخوانی این تابع در goroutine, از (go f(s استفاده کنید.این goroutineجدید میتونه به صورت همروند با یکبار فراخوانی اجرا بشه.

   go f("goroutine")

شما همچنین میتونید یک goroutine رو برای فراخوانی یک تابع ناشناس شروع کنید .

   go func(msg string) {
        fmt.Println(msg)
    }("going")

حالا فراخوانی هردوتابع ما به صورت ناهمگام در goroutineهای جدا اجرا میشه،بنابراین اجرا در اینجا اتفاق می افتد. این Scanln نیاز داره که ما یک کلید رو قبل از اجرای برنامه فشار بدهیم.

   fmt.Scanln()
    fmt.Println("done")
}

اجرای این برنامه

وقتی ما این برنامه رو اجرا میکنیم, فراخوانی های بلوکه رو در اول میبینیم ،سپس خروجی ترکیبی از دو goroutineهامون رو مشاهده میکنیم. این ترکیب نشان میدهد که goroutineها به صورت همزمان به وسیله زمان اجرای زبان گو اجرا میشوند.

$ go run goroutines.go
direct : 0
direct : 1
direct : 2
goroutine : 0
going
goroutine : 1
goroutine : 2
<enter>
done

در مبحث بعدی ما به مکمل goroutineها در همروندی برنامه های گو نگاه می اندازیم: کانالها.

<<خطاها-----------------------------------------------کانالها>>